【问题标题】:How to combine two variables from different data frames in R?如何在R中组合来自不同数据帧的两个变量?
【发布时间】:2019-11-05 20:17:51
【问题描述】:

我是 R 编程新手,所以这个问题可能很简单。 无论如何,我试图为我正在尝试做的这件事找到一些答案,但没有得到它。

所以,我正在尝试将新数据导入到旧 data.frame 中。 问题是这些数据必须用已经存在的变量替换以前的 NA 值。 另外我的数据在不同时期(年份)有不同的个人(公司),而我的新数据集只有缺失的公司和年份,加上我已经有的一些观察。

我尝试用下面的数据框模拟问题:

带有 NA 的数据框:

df1 <- data.frame( company = c(rep("A",3), rep("B",3), rep("C",3)),
                   year = c(rep(2016:2018,each=1)), 
                   income = c(95,87,93,NA,NA,58,102,80,NA),
                   debt = c(43,50,51,NA,37,37,53,NA,NA),
                   stringsAsFactors= F )

为了搜索新数据,我创建了一个仅包含缺失数据的数据集,因为我的数据包含许多观察结果:

df_NA <- data.frame(df1[is.na(df1$income & df1$debt),])

所以在搜索之后,我能够找到丢失的数据,现在我有这样的东西:

df2 <- data.frame( company = c("A", "B" , "C" , "C"),
                   year = c(2018, 2016, 2017, 2018),
                   income = c(60,55, 80, 82),
                   debt = c(32,37, 53,48),
                   stringsAsFactors= F )

现在,我正在尝试将这些数据整合在一起,因此我有完整的 data.frame 可以工作。

问题是我还没有找到方法。我尝试过合并和加入,为公司和年份编制索引,但是在 data.frame 中具有相同名称的变量会被重复和后缀。

在我的数据中,我有更多的观察和变量要填写,所以我想找到一种可以通过命令完成的方法。而且这种情况将来会再次发生,所以会很有帮助。

如果这个问题已经得到解答,我很抱歉。谢谢!

【问题讨论】:

    标签: r dataframe join merge


    【解决方案1】:

    这是一个使用data.table的选项:

    library(data.table)
    setDT(df1)
    setDT(df2)
    df1[df2, on=c("company", "year"), c('income', 'debt') := { list(i.income, i.debt)}]
    
    
    #   company year income debt
    #1:       A 2016     95   43
    #2:       A 2017     87   50
    #3:       A 2018     60   32
    #4:       B 2016     55   37
    #5:       B 2017     NA   37
    #6:       B 2018     58   37
    #7:       C 2016    102   53
    #8:       C 2017     80   53
    #9:       C 2018     82   48
    

    或者使用dplyr的另一个选项

    library(dplyr)
    full_join(df1, df2, by = c("year", "company")) %>% 
      mutate(
        income = coalesce(income.x, income.y),
        debt= coalesce(debt.x, debt.y), 
      ) %>% 
      select(company, year, income, debt)
    

    【讨论】:

    • 工作得很好,谢谢!但是我注意到可能是一个问题的一件事是,如果新数据帧有 NA,它也会替换旧数据帧中的观察结果。所以应该小心不要丢失旧数据框中的任何观察结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多