2015-10-16 30 views
0

描述我的问题有点难。假设我有两个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 

数据1大约有40K行,数据2有大约500

我想

如果data1$lat == data2$latdata1$long == data2$long,然后data1$ele == data2$ele

我也想检查2个数据帧的行和纬度值,以确保long值匹配。我试过使用data.table()和merge(),但他们都不工作...任何想法?在基础R

+0

如果你连接'拉特'和'长'怎么办?你可以很容易地合并。 –

+0

你真的在'data1'中有一个'ele'列填充了'NA'吗? –

+0

是的,我喜欢。我想通了! – user3697665

回答

1

简单的解决方案:

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

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

@RichardScriven固定方括号,'=='有什么问题? –

+0

我可能是错的。我正在想别的东西。 –

1

另一种方式去了解它,通过@Roman Lustrik的建议来连接。同样在基地R.

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

谢谢!这真的解决了我的问题。你能否解释一下为什么我们需要在这种情况下使用粘贴?非常感谢! – user3697665

+0

'paste()'简单地把拉特和长连在一起,连字符拉长。这样你只能匹配一个变量而不是匹配多个变量。看看'paste()'和'paste0()' – Badger

+0

我明白了,谢谢! – user3697665

相关问题