R 通过匹配两个数据帧中每行的值来填充列值

R 通过匹配两个数据帧中每行的值来填充列值,r,R,要描述我的问题有点难。假设我有两个data.frame,我必须通过匹配每行中的值来填充列值 data1 date lat long ele 1 16-JAN-1995 36.2 -113.8 NA 2 16-JAN-1995 33.8 -113.8 NA 3 16-JAN-1995 31.2 -113.8 NA 4 16-JAN-1995 28.8 -113.8 NA 5 16-JAN-1995 26.2 -1

要描述我的问题有点难。假设我有两个data.frame,我必须通过匹配每行中的值来填充列值

data1
         date  lat   long      ele  
1 16-JAN-1995 36.2 -113.8       NA
2 16-JAN-1995 33.8 -113.8       NA
3 16-JAN-1995 31.2 -113.8       NA
4 16-JAN-1995 28.8 -113.8       NA
5 16-JAN-1995 26.2 -113.8       NA
6 16-JAN-1995 23.8 -113.8       NA

data2
   lat   long     ele
1 36.2 -113.8 1526.25
2 33.8 -113.8  612.94
3 31.2 -113.8  328.62
4 28.8 -113.8  367.81
5 26.2 -113.8   58.50
6 23.8 -113.8    0.00
Data1大约有40k行,data2大约有500行

我想要

如果
data1$lat==data2$lat
data1$long==data2$long
,则
data1$ele==data2$ele

我还想逐行检查两个数据帧的lat和long值,以确保long&lat值匹配


我尝试过使用data.table()和merge(),但它们似乎都不起作用。。。有什么想法吗?

以R为基础的简单解决方案:

indices <- df1$lat == df2$lat & df1$long == df2$long

df1$ele[indices] <- df2$ele[indices]

索引另一种方法,通过@Roman Lustrik的建议连接。也在基地R

df1$ele <- df2[match(paste(df1$lat,df1$long),paste(df2$lat,df2$long)),"ele"]

df1$ele如果将
lat
long
连接起来会怎么样?你可以很容易地合并。你真的在
data1
中有一个
ele
列填充了
NA
s吗?是的,我有。我想出来了!谢谢这真的解决了我的问题。你能再解释一下为什么我们需要在这种情况下使用粘贴吗?非常感谢
paste()
简单地用连字符lat-long将lat和long放在一起。通过这种方式,您只匹配一个变量,而不是匹配多个变量。查看
paste()
paste0()
@RichardScriven修复了方括号,
=
有什么问题?我可能错了。我在想别的事情。