我有两个数据框:
geodata<-read.csv(text='postalcode;latitude;longitude
7000;47.8415;16.5041
7000;47.8921;16.4011
7000;47.9400;16.5032
7071;47.8012;16.671
2443;47.9156;16.5179', sep=';', header=TRUE)
addresses<-read.csv(text='postalcode;address
2400;Lorem ipsum
7000;Dolor sit amet
2443;Consetetur sadipscing elitr
7000;Sed diam nonumy', sep=';', header=TRUE)
我需要的是地址数据框中的两个附加列以及相应的(当存在多个邮政编码行时第一个匹配)geodata$latitude 和geodata$longitude 值。
How to join (merge) data frames (inner, outer, left, right)?显示了几乎我正在寻找的内容,只是我不希望合并的数据框中出现重复的行。
我尝试过类似的方法
# code not working... #
addresses$latitude<-geodata[addresses$postalcode==geodata$postalcode]
我知道这真的很难看:-(
最佳答案
此处无需使用额外的软件包。只需合并
:
merge(geodata,addresses,all.x=TRUE)
# postalcode latitude longitude address
# 1 2443 47.9156 16.5179 Consetetur sadipscing elitr
# 2 7000 47.8415 16.5041 Dolor sit amet
# 3 7000 47.8415 16.5041 Sed diam nonumy
# 4 7071 47.8012 16.6710 <NA>
编辑:
要添加地理数据到地址,我们应该颠倒此处的顺序:
merge(addresses,geodata,all.x=TRUE)
postalcode address latitude longitude
1 2400 Lorem ipsum NA NA
2 2443 Consetetur sadipscing elitr 47.9156 16.5179
3 7000 Dolor sit amet 47.8415 16.5041
4 7000 Sed diam nonumy 47.8415 16.5041
关于r - 将数据帧的新列分配给与其他数据帧匹配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32245829/