使用来自另一个数据帧的值仅填充数据框中的缺失值

时间:2018-05-17 13:48:09

标签: r dataframe

我的问题类似于one。假设我有两个数据帧,如下所示:

df1

val2val3date列中有一些缺失值。我想仅使用正确匹配替换这些列中的缺失值,并根据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 的潜在解决方案:

val2

这里的问题是它已将df1df2的第3个值替换为df1中的匹配值,即使df1中的第3个值不是最初失踪。另外,如何使用df2中的匹配值填充Azure WebJobs Dashboard中的所有缺失值,而不是一次填充一列?

1 个答案:

答案 0 :(得分:0)

以下是使用dplyr包的一种解决方案:

df1 <- df1 %>%
  left_join(., df2, by = 'date') %>%
  mutate(
    val2 = ifelse(is.na(val2.x), val2.y, val2.x),
    val3 = ifelse(is.na(val3.x), val3.y, val3.x)
    ) %>%
  select(date, val1, val2, val3)

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 -1.0803926 -0.1389861
5 2001-05-01  1.71144087 -0.1575344 -0.5973131

最后用种子集。该死的,我一直得到不同的结果! :)

正确指出coalesce选项:

df1 %>%
  left_join(., df2, by = 'date') %>%
  mutate(
    val2 = coalesce(val2.x, val2.y),
    val3 = coalesce(val3.x, val3.y)
    ) %>%
  select(date, val1, val2, val3)

肯定比ifelse清洁。