纵向数据中有超过 3 个观察值的子集案例?
Subset cases in which there were more than 3 observations in longitudinal data?
有一组纵向数据,其中在各种波浪中重复收集测量值(参见下面的设置示例。然而,随着这类数据的发展,出现了损耗,一些波浪在研究结束前停止了。但是,我的分析假设每个参与者都有 至少 3 个观察值
ID
Wave
Score
1000
0
5
1000
1
4
1001
0
6
1001
1
6
1001
2
7
我如何只对那些至少有 3 个观察值的 ID(主题)进行子集化? 我已经研究过类似的问题Whosebug 但它们似乎不适合这个特定问题。
方法一
# 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,你可以试试这个 one-liner。
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)
)
有一组纵向数据,其中在各种波浪中重复收集测量值(参见下面的设置示例。然而,随着这类数据的发展,出现了损耗,一些波浪在研究结束前停止了。但是,我的分析假设每个参与者都有 至少 3 个观察值
ID | Wave | Score |
---|---|---|
1000 | 0 | 5 |
1000 | 1 | 4 |
1001 | 0 | 6 |
1001 | 1 | 6 |
1001 | 2 | 7 |
我如何只对那些至少有 3 个观察值的 ID(主题)进行子集化? 我已经研究过类似的问题Whosebug 但它们似乎不适合这个特定问题。
方法一
# 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,你可以试试这个 one-liner。
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)
)