我想检测一个对象的所有重复坐标,这意味着我想保留其中一种,但标记所有其他坐标。 如果我尝试:
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
}
}
}
然后我会标记每对坐标。 我有什么想法可以保留第一个吗?
答案 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"))