我希望通过随机抽样的参与者对纵向数据集进行子集化。在这个例子中,每个参与者有三个条目,我想抽样4个参与者。
id <- rep(c(1:6), each = 3)
score <- rnorm(18, 10, 3)
group <- rep(c("a", "b"), each = 3, times = 3)
df <- data.frame(id, group, score)
我试过这个命令......
dfSub <- df[df$id %in% sample(df$id, 4, replace = FALSE),]
但它只返回三个参与者的条目,而不是我规定的四个参赛者。任何人都可以告诉我为什么这不起作用以及如何做得更好?
答案 0 :(得分:1)
我们可以使用unique
df[df$id %in%sample(unique(df$id), 4, replace = FALSE),]
# id group score
#7 3 a 8.123872
#8 3 a 12.685344
#9 3 a 12.824781
#10 4 b 11.868296
#11 4 b 13.000660
#12 4 b 9.541258
#13 5 a 9.722255
#14 5 a 3.889751
#15 5 a 10.851232
#16 6 b 10.945997
#17 6 b 11.632380
#18 6 b 3.289507
由于以下
,OP的命令无法解决 sample(c(1, 1, 4,3), 3, replace=FALSE)
#[1] 3 4 1
sample(c(1, 1, 4,3), 3, replace=FALSE)
#[1] 1 3 1
如果存在重复值,sample
仍然可以为指定的unique
返回重复值而不是size
值。 replace
仅确定是否应该替换采样。在虚拟示例中,我们有2 1s
。因此,即使使用replace=FALSE
,sample
中可能的1的数量也是2。