首页 > 解决方案 > 如何使用跨 2 个数据帧的多个条件填充列?

问题描述

我试图用基于两个单独数据帧的两个条件的值填充列。所以,

df1$day == df2$day & df1$hour == df2$hour 然后用 df2$depth 填充 df1$X

我很挣扎,因为我没有要求它用通用值填充它(即如果 x==y,则 y2=1)。我试图让它跨多行选择值。一个模拟示例:

df1                         df2
day   hour   X              day  hour   depth 
1      10    NA             1    10     50
1      11    NA             1    11     10
2      5     NA             1    3      100
5      9     NA             5    9      50
6      20    NA             7    17     80
7      17    NA             10    4     65

任何帮助将不胜感激。

标签: rconditional-statements

解决方案


一个更简单的选择是加入data.table

library(data.table)
setDT(df1)[df2, X := depth, on = .(day, hour)]
df1
#   day hour  X
#1:   1   10 50
#2:   1   11 10
#3:   2    5 NA
#4:   5    9 50
#5:   6   20 NA
#6:   7   17 80

base R,我们可以使用match

df1$X <- with(df1, df2$depth[match(paste(day, hour), paste(df2$day, df2$hour))])

数据

df1<- data.frame(day = c(1, 1, 2, 5:7), hour = c(10:11, 5, 9, 20, 17),
         X = NA_integer_)
df2 <- data.frame(day = c(1, 1, 1, 5, 7, 10), hour = c(10, 11, 3, 9, 
       17, 4), depth = c(50, 10, 100, 50, 80, 65))

推荐阅读