r - 结合两个数据框保留所有列

标签 r dataframe plyr dplyr

<分区>

我想做的是合并 2 个数据帧,保留所有列(在下面的示例中没有这样做)并在数据帧中存在来自不常见变量的间隙的地方输入零。

这似乎是一个 plyr 或 dplyr 主题。但是,plyr 中的完全连接不会保留所有列,而左连接或右连接不会保留我想要的所有行。查看 dplyr 备忘单(http://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf),一个 full_join 似乎是我需要的功能,但成功加载包后 R 无法识别此功能。

举个例子:

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

我想要输出...

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

最佳答案

解决方案

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

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

给出相同的结果,都带有多个 NA:

#> 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

用零替换这些条目的一种可能性是将数据框转换为矩阵,更改条目,然后转换回数据框:

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

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

关于r - 结合两个数据框保留所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31025026/

相关文章:

python - 使用映射函数在 pandas 列中绘制直方图

python - 在 pandas 上追加后仅保留重复的索引

r - R中基于不等式的条件累积和

r - 按行比较矩阵与向量中的元素

回收和分配函数 (`split<-` )

r - 转换有序数据

python - 我如何使用 Python Pandas "merge/add"2 个具有相同列和行的混淆矩阵数据帧?

r - 在 amazon EC2 Windows 实例中从浏览器下载

r - 从数据框中的列中添加和减去值

r - 如何用中位数填充NA?