我有以下数据框。我找不到将它们全部合并的令人满意的方法。我尝试了以下方法:
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
谢谢!!!!!!
答案 0 :(得分:2)
R的基本选项是将Reduce
与merge(..., 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_join
和purrr::reduce
library(dplyr)
library(purrr)
reduce(testlist, full_join, by = "name")