将数据框的新列分配给与其他数据框匹配的值

Joh*_*vat 4 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;Lorem ipsum
7000;Dolor sit amet
2443;Consetetur sadipscing elitr
7000;Sed diam nonumy', sep=';', header=TRUE)
Run Code Online (Sandbox Code Playgroud)

我需要的是地址数据框中的两个附加列与相应的(当存在多个邮政编码行时的第一个匹配)geodata $ latitudegeodata $ longitude值.

如何加入(合并)数据框(内部,外部,左侧,右侧)?显示我正在寻找的几乎所有,除了我不想在合并的数据帧中重复行.

我试过类似的东西

# code not working... #
addresses$latitude<-geodata[addresses$postalcode==geodata$postalcode]
Run Code Online (Sandbox Code Playgroud)

我知道这真的很丑:-(

ags*_*udy 6

这里不需要使用额外的包裹.简单merge:

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>
Run Code Online (Sandbox Code Playgroud)

编辑:

要添加地理数据到地址我们应该在这里反转顺序:

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
Run Code Online (Sandbox Code Playgroud)

  • ......我想是'all.x = TRUE'.可怜的老`merge`,被所有闪亮的新工具所忽视:-) (2认同)