如何在不丢失行的情况下加入数据框

时间:2019-01-07 15:57:29

标签: r dataframe join dplyr

我有以下数据框。我找不到将它们全部合并的令人满意的方法。我尝试了以下方法:

a=data.frame('name'=c('a','b','c','d'),'value'=c(23,45,23,56))
b=data.frame('name'=c('a','b','f','e'),'value'=c(23,45,23,56))
d=data.frame('name'=c('g','b','f','e'),'value'=c(23,45,23,56))
testlist=list(a,b,d)
c=join_all(testlist,by='name',type='left',match='all')

但这会返回下表:

  name value value value
1    a    23    23    NA
2    b    45    45    45
3    c    23    NA    NA
4    d    56    NA    NA

相反,我想要一个在第一列中包含所有可能名称的表(“ a”,“ b”,“ c”,“ d”,“ e”,“ f”,“ g”)和3个不同列(每个数据帧1个)中对应行中的所有其他值。 我该怎么做?所有blanck值都为NA都没关系,我稍后将其更改为0

谢谢!!!!!!

1 个答案:

答案 0 :(得分:2)

R的基本选项是将Reducemerge(..., all = TRUE)一起使用

Reduce(function(x, y) merge(x, y, by = "name", all = T), testlist)
#  name value.x value.y value
#1    a      23      23    NA
#2    b      45      45    45
#3    c      23      NA    NA
#4    d      56      NA    NA
#5    e      NA      56    56
#6    f      NA      23    23
#7    g      NA      NA    23

或类似地使用dplyr::full_joinpurrr::reduce

library(dplyr)
library(purrr)
reduce(testlist, full_join, by = "name")