R 通过匹配两个数据帧中每行的值来填充列值
要描述我的问题有点难。假设我有两个data.frame,我必须通过匹配每行中的值来填充列值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
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修复了方括号,=
有什么问题?我可能错了。我在想别的事情。