【问题标题】:Sample by groupy with a condition (r)具有条件 (r) 的分组抽样
【发布时间】:2015-08-20 12:17:49
【问题描述】:

我需要为每个人(id)随机选择一本日记,但仅限于那些填写多个的人。

假设我的数据是这样的

dta = rbind(c(1, 1, 'a'), 
      c(1, 2, 'a'), 
      c(1, 3, 'b'), 
      c(2, 1, 'a'), 
      c(3, 1, 'b'), 
      c(3, 2, 'a'), 
      c(3, 3, 'c'))

colnames(dta) <- c('id', 'DiaryNumber', 'type')
dta = as.data.frame(dta)
dta

  id     DiaryNumber type
  1             1    a
  1             2    a
  1             3    b
  2             1    a
  3             1    b
  3             2    a
  3             3    c

例如,id 1 填写了 3 篇日记。我需要的是随机选择三本日记中的一本。 ID 2 只填了一本日记,所以我不需要对它做任何事情。

我不知道我该怎么做。 有任何想法吗 ?

【问题讨论】:

    标签: r dplyr sample


    【解决方案1】:

    基础包:

    set.seed(123)
    df <- lapply(split(dta, dta$id), function(x) x[sample(nrow(x), 1), ])
    do.call("rbind", df) 
    

    输出:

      id DiaryNumber type
    1  1           1    a
    2  2           1    a
    3  3           2    a
    

    【讨论】:

      【解决方案2】:

      你可以使用sample_n:

      library(dplyr)
      dta %>% group_by(id) %>% sample_n(1)
      ## Source: local data frame [3 x 3]
      ## Groups: id
      ## 
      ##   id DiaryNumber type
      ## 1  1           2    a
      ## 2  2           1    a
      ## 3  3           1    b
      

      【讨论】:

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