通过随机选择的参与者 ID 对纵向数据框进行子集化

Subsetting Longitudinal Dataframe by Randomly Selected Participant ID

我想通过随机抽样的参与者数量对纵向数据集进行子集化。在此示例中,每个参与者有 3 个条目,我想对 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),]

但它只是returns三个参与者的条目,而不是我规定的四个。谁能告诉我为什么这不起作用以及如何做得更好?

我们可以使用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 仍然可以 return 重复,而不是 size 指定的 unique 值。 replace 仅确定是否应通过替换进行采样。在虚拟示例中,我们有 2 1s。因此,即使 replace=FALSEsample 中可能出现的 1 的数量也是 2.