删除在 R 中的 data.frame 中某个因子水平仅出现一次的行
Remove rows where a level of a factor occurs only one time in a data.frame in R
我有以下示例:
Id = c(1, 1, 2, 2, 2, 1, 4, 3, 3, 3)
long = c("60.466681", "60.664116", "60.766690", "60.86879", "60.986569","60.466681", "60.664116", "60.766690", "60.86879", "60.986569" )
data = data.frame(Id, long)
我想删除因子 Id
的水平在 data.frame 中只出现一次的行。例如,我会删除带有 Id == 4
的行并保留其他行。
我试过了:
data$duplicated <- duplicated(data$Id)
subset(data, data$duplicated == "FALSE")
但这也会删除每个因素第一次出现时的行
时间(即第一行 Id=1
或 Id=2
)
Id long duplicated
1 1 60.466681 FALSE
2 1 60.664116 TRUE
3 2 60.766690 FALSE
4 2 60.86879 TRUE
5 2 60.986569 TRUE
6 1 60.466681 TRUE
有没有简单的方法来做到这一点?
library(plyr)
data2<-ddply(data,.(Id),function(x){
if(nrow(x)==1){
return(NULL)
}
else{
return(x)
}
})
> data2
Id long
1 1 60.466681
2 1 60.664116
3 1 60.466681
4 2 60.766690
5 2 60.86879
6 2 60.986569
7 3 60.766690
8 3 60.86879
9 3 60.986569
我有以下示例:
Id = c(1, 1, 2, 2, 2, 1, 4, 3, 3, 3)
long = c("60.466681", "60.664116", "60.766690", "60.86879", "60.986569","60.466681", "60.664116", "60.766690", "60.86879", "60.986569" )
data = data.frame(Id, long)
我想删除因子 Id
的水平在 data.frame 中只出现一次的行。例如,我会删除带有 Id == 4
的行并保留其他行。
我试过了:
data$duplicated <- duplicated(data$Id)
subset(data, data$duplicated == "FALSE")
但这也会删除每个因素第一次出现时的行
时间(即第一行 Id=1
或 Id=2
)
Id long duplicated
1 1 60.466681 FALSE
2 1 60.664116 TRUE
3 2 60.766690 FALSE
4 2 60.86879 TRUE
5 2 60.986569 TRUE
6 1 60.466681 TRUE
有没有简单的方法来做到这一点?
library(plyr)
data2<-ddply(data,.(Id),function(x){
if(nrow(x)==1){
return(NULL)
}
else{
return(x)
}
})
> data2
Id long
1 1 60.466681
2 1 60.664116
3 1 60.466681
4 2 60.766690
5 2 60.86879
6 2 60.986569
7 3 60.766690
8 3 60.86879
9 3 60.986569