【问题标题】:Fill column values by matching values in each row in two dataframe通过匹配两个数据框中每一行中的值来填充列值
【发布时间】:2026-02-01 05:05:01
【问题描述】:

描述我的问题有点困难。假设我有两个 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$latdata1$long == data2$long,那么data1$ele == data2$ele

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

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

【问题讨论】:

  • 如果将latlong 连接起来会怎样?您可以轻松合并。
  • 你真的有一个ele 列在NAs 中填充data1 吗?
  • 是的,我愿意。我想通了!

标签: r


【解决方案1】:

通过@Roman Lustrik 的建议进行连接的另一种方法。也在基础 R 中。

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

【讨论】:

  • 谢谢!这真的解决了我的问题。你能解释一下为什么在这种情况下我们需要使用 paste 吗?非常感谢!
  • paste() 只是将 lat 和 long 与连字符 lat-long 放在一起。这样,您只匹配单个变量而不是匹配多个变量。查看paste()paste0()
  • 谢谢,这也解决了我的问题!:)
【解决方案2】:

基础 R 中的简单解决方案:

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

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

【讨论】:

  • @RichardScriven 修正了方括号,== 有什么问题?
  • 我可能错了。我在想别的事。
最近更新 更多