关于r:组合两个保留所有列的数据帧

Combining two dataframes keeping all columns

本问题已经有最佳答案,请猛点这里访问。

我要做的是组合2个数据帧,保留所有列(在下面的示例中没有这样做)和输入零,其中数据帧中存在不常见变量的间隙。

这似乎是一个PLYR或DPLYR主题。然而,PLYR中的完全联接并不能保留所有列,而左联接或右联接并不能保留我想要的所有行。查看dplyr作弊表(http://www.rstudio.com/wp content/uploads/2015/02/data wranging craitsheet.pdf),完整的连接似乎是我需要的功能,但r在成功加载包后无法识别此功能。

例如:

1
2
3
4
5
6
7
8
9
10
col1 <- c("ab","bc","cd","de")
col2 <- c(1,2,3,4)
df1 <- as.data.frame(cbind(col1,col2))
col1 <- c("ab","ef","fg","gh")
col3 <- c(5,6,7,8)
df2 <- as.data.frame(cbind(col1,col3))
library(plyr)
Example <- join(df1,df2,by ="col1", type ="full") #Does not keep col3
library(dplyr)
Example <- full_join(df1,df2,by ="col1") #Function not recognised

我想要输出…

1
2
3
4
5
6
7
8
col1 col2 col3
ab    1    5
bc    2    0
cd    3    0
de    4    0
ef    0    6
fg    0    7
gh    0    8


解决方案

1
Example <- merge(df1, df2, by ="col1", all = TRUE)`

1
Example <- join(df1,df2,by ="col1", type ="full")

给出相同的结果,两个结果都带有一些NA:

1
2
3
4
5
6
7
8
9
#> Example
#  col1 col2 col3
#1   ab    1    5
#2   bc    2 <NA>
#3   cd    3 <NA>
#4   de    4 <NA>
#5   ef <NA>    6
#6   fg <NA>    7
#7   gh <NA>    8

用零替换这些条目的一种可能性是将数据帧转换为矩阵、更改条目并转换回数据帧:

1
2
3
4
5
6
7
8
9
10
11
12
Example <- as.matrix(Example)
Example[is.na(Example)] <- 0
Example <- as.data.frame(Example)
#> Example
#  col1 col2 col3
#1   ab    1    5
#2   bc    2    0
#3   cd    3    0
#4   de    4    0
#5   ef    0    6
#6   fg    0    7
#7   gh    0    8

附言:我几乎可以肯定@akrun知道另一种在一行中实现这一目标的方法;)


跟随大卫阿伦伯格的评论…

1
Example <- merge(df1, df2, by ="col1", all = TRUE)