具有条件的分组样本(r)

时间:2015-06-05 13:55:05

标签: r dplyr sample

我需要为每个人(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本日记。我需要的是随机选择3本日记中的一本。 Id 2只填写了一本日记,所以我不需要做任何事情。

我不知道我怎么能这样做。 有任何想法吗 ?

2 个答案:

答案 0 :(得分:4)

您可以使用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

答案 1 :(得分: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