R 将数据帧的新列指定给与其他数据帧匹配的值
我有两个数据帧:R 将数据帧的新列指定给与其他数据帧匹配的值,r,R,我有两个数据帧: 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;Lo
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可能与dplyr的左联合:
library(dplyr)
left_join(addresses,geodata, fill=NA)
#Joining by: "postalcode"
# postalcode address latitude longitude
#1 2400 Lorem ipsum NA NA
#2 7000 Dolor sit amet 47.8415 16.5041
#3 2443 Consetetur sadipscing elitr 47.9156 16.5179
#4 7000 Sed diam nonumy 47.8415 16.5041
编辑,如果每个邮政编码有多个结果,您可以尝试子集地理数据:
#left_join(addresses, subset(geodata, !duplicated(postalcode)), fill=NA)
#Joining by: "postalcode"
# postalcode address latitude longitude
#1 2400 Lorem ipsum NA NA
#2 7000 Dolor sit amet 47.8415 16.5041
#3 2443 Consetetur sadipscing elitr 47.9156 16.5179
#4 7000 Sed diam nonumy 47.8415 16.5041
你可以加入他们(在plyr)
库(plyr)
地址此处无需使用额外的软件包。只需合并
:
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>
…我想是用all.x=TRUE
。可怜的旧merge
,被所有闪亮的新工具忽略了:-)@agstudy-我想也要切换地址和地理数据,所以x
引用了较长的文件。在这个解决方案中,您丢失了一个地址。邮政编码2400,地址Lorem ipsumerasmortg:失去没有地理数据的地址是我所期望的。我的目标是将数据绘制成地图。谢谢,这几乎和预期一样有效。我编辑了我的文章:问题是,每个邮政编码可能有多个lat/loc值。我需要的是GeodataDataFame中的第一条匹配线。@JohannHorvat编辑了答案,请告诉我它是否有效
library(plyr)
addresses <- join(addresses,geodata)
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