【问题标题】:Assign established values randomly by ID in R在 R 中按 ID 随机分配已建立的值
【发布时间】:2021-02-21 15:43:21
【问题描述】:

我有这个文件:

ID  P
1   10
1   12
1   11
2   9
2   8
2   10
3   11
3   12
3   14
4   15
4   16
4   8
5   11
5   13
5   10
6   14
6   16
6   11

我想将这些值 (a,b,c) 随机分配给文件:

像这样:

ID  P   Group
1   10  a
1   12  b
1   11  c
2   9   c
2   8   a
2   10  b
3   11  a
3   12  c
3   14  b
4   15  c
4   16  a
4   8   b
5   11  b
5   13  c
5   10  a
6   14  b
6   16  c
6   11  a

我需要做几次,每次都是随机的。我试过这个:

df %>% group_by(ID) %>% replicate(1,sample(df$group))

但是,可以肯定的是,没有用。有什么建议吗?

【问题讨论】:

    标签: r dplyr assign


    【解决方案1】:

    两种解决方案,一种有分组,另一种没有

    library(tidyverse)
    df <- dplyr::tribble(
        ~ID, ~P,
        1,10,
        1,12,
        1,11,
        2,9,
        2,8,
        2,10,
        3,11,
        3,12,
        3,14,
        4,15,
        4,16,
        4,8,
        5,11,
        5,13,
        5,10,
        6,14,
        6,16,
        6,11
    )
    
    sample_vector <- c("a","b","c")
    
    ##Without grouping id
    df_2 <- df %>%
        mutate(Group = sample(sample_vector, nrow(df), replace = TRUE))
    
    ##With grouping by ID
    df_2 <- df %>% group_by(ID) %>%
        mutate(Group = sample(sample_vector, n(), replace = TRUE))
    

    【讨论】:

      【解决方案2】:

      这是sample的选项

      library(dplyr)
      df1 %>%
           group_by(ID) %>%
           mutate(Group = sample(c('a', 'b', 'c'), n(), replace = TRUE))
      

      数据

      df1 <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 
      4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L), P = c(10L, 12L, 11L, 9L, 8L, 
      10L, 11L, 12L, 14L, 15L, 16L, 8L, 11L, 13L, 10L, 14L, 16L, 11L
      )), class = "data.frame", row.names = c(NA, -18L))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多