【发布时间】:2018-05-17 13:48:08
【问题描述】:
我的问题与one 类似。假设我有两个数据框,如下所示:
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 列中有一些缺失值。我只想用正确匹配替换那些列中的缺失值,根据df2 中的date 匹配。根据我链接的问题,这是使用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
这里的问题是它已经将df1 中的val2 的第三个值替换为df2 中的匹配值,尽管df1 中的第三个值最初并没有丢失。另外,如何使用df2 中的匹配值填充df1 中的所有缺失值,而不是一次只填写一列?
【问题讨论】: