删除相同的对象

时间:2017-01-10 15:50:06

标签: r

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

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
    }
  }
}

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

3 个答案:

答案 0 :(得分:0)

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

# 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列上的重复函数,它将给出一个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

答案 1 :(得分:0)

在dplyr中,你可以这样做:

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

答案 2 :(得分:0)

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

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