如何在R中组合来自不同数据帧的两个变量?

我是R编程的新手,所以这个问题可能很简单。 无论如何,我已经尝试为我要做的特定事情找到一些答案,但是没有得到。

因此,我试图将新数据导入到旧data.frame中。 问题在于,该数据必须替换现有的NA值到已存在的变量中。 另外,我的数据在不同的时期(年)中具有不同的个人(公司),而我的新数据集仅包含缺失的公司和年份,以及我已经拥有的一些观察结果。

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

带有NA的数据框:

:attribute

为了搜索新数据,我创建了一个仅包含缺失数据的数据集,因为我的数据需要进行很多观察:

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

因此,搜索后,我能够找到丢失的数据,现在我有了类似的东西:

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

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

问题是我还找不到解决方法。我已经尝试过合并和联接,为公司和年份建立索引,但是在data.frame中具有相同名称的变量会重复并带有后缀。

在我的数据中,我需要填充更多的观察值和变量,因此我想找到一种方法来执行命令。将来还会再次发生这种情况,因此将非常有帮助。

对不起,如果已经回答了。谢谢!

vi324 回答:如何在R中组合来自不同数据帧的两个变量?

以下是使用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)
本文链接:https://www.f2er.com/3156643.html

大家都在问