结合两个数据框保留所有列
Combining two dataframes keeping all columns
我想做的是合并 2 个数据帧,保留所有列(在下面的示例中没有这样做)并在数据帧中存在来自不常见变量的间隙的地方输入零。
这似乎是一个 plyr 或 dplyr 主题。但是,plyr 中的完全连接不会保留所有列,而左连接或右连接不会保留我想要的所有行。查看dplyr cheatsheet(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
根据上面 David Arenberg 的评论...
Example <- merge(df1, df2, by = "col1", all = TRUE)
解决方案
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 知道另一种在一行中实现此目的的方法;)
我想做的是合并 2 个数据帧,保留所有列(在下面的示例中没有这样做)并在数据帧中存在来自不常见变量的间隙的地方输入零。
这似乎是一个 plyr 或 dplyr 主题。但是,plyr 中的完全连接不会保留所有列,而左连接或右连接不会保留我想要的所有行。查看dplyr cheatsheet(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
根据上面 David Arenberg 的评论...
Example <- merge(df1, df2, by = "col1", all = TRUE)
解决方案
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 知道另一种在一行中实现此目的的方法;)