[英]R: How to get missing records based on values in two columns
我有两个大的经度/纬度坐标数据CoastalStates_Tax
, CoastalStates_Tax
和CoastalStates
,除了CoastalStates_Tax
还有几百万个坐标外,它们几乎是相同的。 我想弄清楚CoastalStates_Tax
中的哪些行不在CoastalStates
,但是无论在Tax
数据集中的哪里,仍然需要能够跟踪丢失行的索引。
这就是CoastalStates_Tax
样子:
RecordID_b PROPERTY LEVEL LONGITUDE PROPERTY LEVEL LATITUDE
1 132381977 -77.06421 39.16937
2 132381978 -77.18106 39.08811
3 132381979 -77.03353 39.02414
4 132381980 -77.09930 39.00716
5 132381981 -77.25450 39.10422
6 132381982 -77.02797 39.08087
和CoastalStates
:
RecordID PROPERTY LEVEL LONGITUDE PROPERTY LEVEL LATITUDE
1 1 -80.24787 25.85063
2 2 -80.14940 25.84582
3 3 -80.13115 25.85699
4 4 -80.37275 25.77741
5 5 -80.12095 25.82633
6 6 -80.39949 25.73273
我尝试将dplyr anti_join
函数与anti_join(CoastalStates_Tax,CoastalStates,by=c("PROPERTY LEVEL LONGITUDE","PROPERTY LEVEL LATITUDE"))
,但它只给我4,635,393行。
两个数据集之间的行差为4,637,029,所以我缺少大约1600行,但我不知道为什么。 我是否在滥用anti_join
,如果是,是否有其他建议可以解决此问题?
我的建议是将经度和纬度都round
到小数点后三位(精度最高为110米),而不是在加入这些列之前转换为character
。
尝试可以是:
library(dplyr)
CoastalStates_Tax %>%
mutate_at(vars(starts_with("PROPERTY.LEVEL")), funs(as.character(round(.,3)))) %>%
anti_join(mutate_at(CoastalStates,
vars(starts_with("PROPERTY.LEVEL")), funs(as.character(round(.,3)))),
by=c("PROPERTY.LEVEL.LONGITUDE", "PROPERTY.LEVEL.LATITUDE"))
# RecordID_b PROPERTY.LEVEL.LONGITUDE PROPERTY.LEVEL.LATITUDE
# 1 132381977 -77.064 39.169
# 2 132381978 -77.181 39.088
# 3 132381979 -77.034 39.024
# 4 132381980 -77.099 39.007
# 5 132381981 -77.254 39.104
# 6 132381982 -77.028 39.081
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.