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