select R中重复测量中的重复ID

select repeated ID in the repeated meaasure in R

我有重复的数据。有两波。我想select那些做过两次测试的人,所以他们的ID重复了两次。有些人只做过一次,我想排除他们。我的数据是一个long structure format.In数据结构,有一个变量叫“wave”,要么标为“1”要么标为“2”。所以,我的问题是我想使用 wave 1 和 wave 2 获取 ID。 这是我的数据:

id<-c(1, 2, 3,4,5,6,1,2,4)
wave<-c(1,1,2,1,2,2,2,2,2)
df<-cbind(id,wave)

所以1,2,4的ID有两波,我想把它们去掉。有什么想法吗?

评论是正确的:你应该提供你的数据,一个你尝试过的证明问题的例子,最好是一个所需输出的例子。请以后也这样做。

这里有一个示例,希望能模拟您的情况:

set.seed(1)    # for reproducible example
df <- data.frame(ID=c(1:5,1:3),
                 wave=c(rep(1,5),rep(2,3)),
                 x=rnorm(8))
df
#   ID wave          x
# 1  1    1 -0.6264538
# 2  2    1  0.1836433
# 3  3    1 -0.8356286
# 4  4    1  1.5952808
# 5  5    1  0.3295078
# 6  1    2 -0.8204684
# 7  2    2  0.4874291
# 8  3    2  0.7383247

这是在基础 R 中使用 aggregate(...) 的解决方案。

# base R solution
IDS <- aggregate(wave~ID,df, function(x)length(x)>1)
df[df$ID %in% IDS[IDS$wave,]$ID,]
#   ID wave          x
# 1  1    1 -0.6264538
# 2  2    1  0.1836433
# 3  3    1 -0.8356286
# 6  1    2 -0.8204684
# 7  2    2  0.4874291
# 8  3    2  0.7383247

这是使用 data.table 的解决方案。

# data.table solution
library(data.table)
setDT(df)[,lapply(.SD,function(x)x[.N>1]),by=ID]
#    ID wave          x
# 1:  1    1 -0.6264538
# 2:  1    2 -0.8204684
# 3:  2    1  0.1836433
# 4:  2    2  0.4874291
# 5:  3    1 -0.8356286
# 6:  3    2  0.7383247

还有一个更简单的 data.table 解决方案(@Arun 提供)。

setDT(df)[, if (.N > 1L) .SD, by=ID]

所有这些 select 给定 ID 具有 超过 1(不完全是 2)波的任何行。