Мой вопрос похож на этот один . Допустим, у меня есть два кадра данных, как показано ниже:
set.seed(5)
df1 <- data.frame(date=as.Date(c('2001-01-01', '2001-02-01', '2001-03-01', '2001-04-01', '2001-05-01')),
val1=rnorm(5), val2=c(rnorm(3), NA, NA), val3=c(rnorm(3), NA, NA))
df2 <- data.frame(date=as.Date(c('2001-03-01', '2001-04-01', '2001-05-01')),
val2=rnorm(3), val3=rnorm(3))
df1
date val1 val2 val3
1 2001-01-01 -0.84085548 -0.6029080 -0.2857736
2 2001-02-01 1.38435934 -0.4721664 0.1381082
3 2001-03-01 -1.25549186 -0.6353713 1.2276303
4 2001-04-01 0.07014277 NA NA
5 2001-05-01 1.71144087 NA NA
df2
date val2 val3
1 2001-03-01 -0.8017795 -1.0717600
2 2001-04-01 -1.0803926 -0.1389861
3 2001-05-01 -0.1575344 -0.5973131
df1
имеет некоторые пропущенные значения в столбцах val2
и val3
. Я хочу заменить только пропущенные значения в этих столбцах на правильное соответствие, соответствующее в соответствии с date
из df2
. Из вопроса, с которым я связан, вот потенциальное решение с использованием data.table
:
library(data.table)
setDT(df1)
setDT(df2)
df1[i = df2, val2 := i.val2, on = .(date)]
df1
date val1 val2 val3
1: 2001-01-01 -0.84085548 -0.6029080 -0.2857736
2: 2001-02-01 1.38435934 -0.4721664 0.1381082
3: 2001-03-01 -1.25549186 -0.8017795 1.2276303
4: 2001-04-01 0.07014277 -1.0803926 NA
5: 2001-05-01 1.71144087 -0.1575344 NA
Проблема здесь в том, что он заменил 3-е значение val2
в df1
на соответствующее значение в df2
, хотя 3-е значение в df1
изначально не отсутствовало. Кроме того, как я могу заполнить все отсутствующие значения в df1
их соответствующими значениями в df2
вместо того, чтобы делать это по одному столбцу за раз?