【问题标题】:Remove rows where a level of a factor occurs only one time in a data.frame in R [duplicate]删除在 R 中的 data.frame 中一个因子水平仅出现一次的行 [重复]
【发布时间】:2016-05-10 11:45:40
【问题描述】:

我有以下示例:

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=1Id=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

有没有简单的方法可以做到这一点?

【问题讨论】:

  • 试试gdata::duplicated2

标签: r unique subset r-factor


【解决方案1】:
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

【讨论】:

  • 这样就行了,谢谢!
  • 不幸的是,它不适用于大文件(1500 万行),还有一个我通常没有的内存问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多