0

有一组纵向数据,其中在各种波次中重复收集测量值(请参见下面的设置示例。但是,随着这种数据的进行,存在损耗,一些波在研究结束之前停止。但是,我的分析有假设每个参与者至少有 3 个观察值

ID 海浪 分数
1000 0 5
1000 1 4
1001 0 6
1001 1 6
1001 2 7

我将如何仅对具有至少 3 个观察值的那些 ID(主题)进行子集化?我已经研究过关于 stackoverflow 的类似问题,但它们似乎不适合这个特定问题。

4

2 回答 2

0

方法一

# 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]
于 2022-01-28T16:23:23.873 回答
0

使用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)
)
于 2022-01-29T02:50:44.447 回答