r - 如何使用跨 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
任何帮助将不胜感激。
解决方案
一个更简单的选择是加入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))
推荐阅读
- generics - 强制提供
在 Dart 泛型方法中 - laravel - Laravel Storage::download DONT 工作,Storage::get DO 工作
- fortran - 逆矩阵的错误结果
- jquery - 函数返回零如何解决这个问题?
- python - 如何增加字符串中间的数字?
- java - 您可以在某个步骤中同时使用@Given 和@And 吗?
- javascript - 计算类似于excel的数字数组的颜色代码
- nginx - 如何使用 try_files 绕过 404 HTTP 错误
- excel - 通过VBA在Excel中输入内容后锁定范围内的单元格
- c++ - C ++获取指定线程的堆栈跟踪