【问题标题】:Delete identical objects删除相同的对象
【发布时间】:2017-01-10 15:50:06
【问题描述】:

我想检测一个对象坐标的所有重复项,这意味着我想保留每一种,但标记所有其他的。 如果我尝试:

for(bb in 1:nrow(Cons)){
  for(cc in 1:nrow(Cons)){
    if(identical(Cons$lat[bb], Cons$lat[cc])&& identical(Cons$lng[bb], Cons$lng[cc])&& !identical(bb,cc)){
      Cons$X[bb] <- NA
    }
  }
}

然后我会标记每一对坐标。 有什么想法可以保留第一个吗?

【问题讨论】:

  • 你见过?duplicated
  • 如果你想删除相同的对象,你也可以使用unique
  • 我已经阅读了这两个条目,但我不知道如何与值进行比较。他们不接受 &&
  • 您可以创建一个新列,例如:Cons$duplicated &lt;- duplicated(subset(Cons,select = c("lat","lng")))。
  • 请提供一个可重现的例子:stackoverflow.com/questions/5963269/…

标签: r


【解决方案1】:

正如 cmets 所指出的,这可以通过重复功能来完成。这是一个可重现的示例和解决方案:

# generate some data
# set.seed to make reproducible
set.seed(10)
lat.df <- data.frame(item=1:100, 
    lat=round(runif(100),1), 
    lon=round(runif(100),1))

    head(lat.df)
   item lat lon
1    1 0.5 0.3
2    2 0.3 0.1
3    3 0.4 0.4
4    4 0.7 0.4
5    5 0.1 0.9
6    6 0.2 0.9

如果我们在 lat/lon 列上调用 duplicated 函数,它将给我们一个 TRUE/FALSE 向量,对应于该行是否有重复。我们可以使用这个 TRUE/FALSE 向量将我们的数据帧子集为唯一的条目:

lat.df.unique <- lat.df[!duplicated(lat.df[,c("lat","lon")]),]

# Check dimensions of unique data.frame to see if we have removed dups
dim(lat.df.unique)
[1] 69  3

【讨论】:

    【解决方案2】:

    在 dplyr 中,您可以这样做:

    library(dyplr)
    Cons %>% distinct(lat, lng)
    

    【讨论】:

      【解决方案3】:

      这是一个非常简单的方法。

      library(data.table)
      setDT(Cons)
      Cons = unique(Cons, by = c("lat","lng"))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-26
        • 2020-06-27
        • 1970-01-01
        • 2014-08-30
        • 1970-01-01
        • 2014-06-18
        • 1970-01-01
        • 2020-05-03
        相关资源
        最近更新 更多