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)波的任何行。
我有重复的数据。有两波。我想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)波的任何行。