我需要为每个人(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只填写了一本日记,所以我不需要做任何事情。
我不知道我怎么能这样做。 有任何想法吗 ?
答案 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