我有以下样本:
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
有一种简单的方法吗?
答案 0 :(得分:3)
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