通过随机选择的参与者 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=FALSE
,sample
中可能出现的 1 的数量也是 2.
我想通过随机抽样的参与者数量对纵向数据集进行子集化。在此示例中,每个参与者有 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=FALSE
,sample
中可能出现的 1 的数量也是 2.