有一组纵向数据,其中在各种波次中重复收集测量值(请参见下面的设置示例。但是,随着这种数据的进行,存在损耗,一些波在研究结束之前停止。但是,我的分析有假设每个参与者至少有 3 个观察值
ID | 海浪 | 分数 |
---|---|---|
1000 | 0 | 5 |
1000 | 1 | 4 |
1001 | 0 | 6 |
1001 | 1 | 6 |
1001 | 2 | 7 |
我将如何仅对具有至少 3 个观察值的那些 ID(主题)进行子集化?我已经研究过关于 stackoverflow 的类似问题,但它们似乎不适合这个特定问题。
有一组纵向数据,其中在各种波次中重复收集测量值(请参见下面的设置示例。但是,随着这种数据的进行,存在损耗,一些波在研究结束之前停止。但是,我的分析有假设每个参与者至少有 3 个观察值
ID | 海浪 | 分数 |
---|---|---|
1000 | 0 | 5 |
1000 | 1 | 4 |
1001 | 0 | 6 |
1001 | 1 | 6 |
1001 | 2 | 7 |
我将如何仅对具有至少 3 个观察值的那些 ID(主题)进行子集化?我已经研究过关于 stackoverflow 的类似问题,但它们似乎不适合这个特定问题。
# set as data table
setDT(df)
# calculate no. of waves per ID
df[, no_of_waves := .N, ID]
# subset
df[no_of_waves >= 3]
# calculate no. of waves per ID
df[, no_of_waves := max(Wave), ID]
# subset
df[no_of_waves >= 3]
使用base R,您可以尝试这种单线。
out <- with(df, df[ID %in% names(which(sapply(split(df, ID), nrow) > 2)), ])
输出
> out
ID Wave Score
3 1001 0 6
4 1001 1 6
5 1001 2 7
数据
df <- data.frame(
ID = unlist(mapply(rep, 1000:1001, 2:3)),
Wave = c(0,1,0,1,2),
Score = c(5,4,6,6,7)
)