r - 不带任何键并排粘贴 2 个数据框

标签 r merge dplyr reshape2 melt

我有两个数据框

A   B    E   H  
x1  x2  x3  x6  
x1  x2  x4  x7  
x1  x2  x5  x8  

A   B     
y1  y2    
y1  y2     

这就是我想用 dplyr 或 reshape2 实现的

A   B    E   H  A   B   
x1  x2  x3  x6  y1  y2  
x1  x2  x4  x7  y1  y2   
x1  x2  x5  x8      

谢谢

最佳答案

如果行数相同则使用

cbind(df1, df2)
#   A  B  E  H  A  B
#1 x1 x2 x3 x6 y1 y2
#2 x1 x2 x4 x7 y1 y2
#3 x1 x2 x5 x8 y1 y2

或者在dplyr

library(dplyr)
library(stringr)
df2 %>% 
       rename_all(~ str_c(., ".1")) %>%
       bind_cols(df1, .)

在某些版本的dplyr(0.8.5)中,当出现重复的列名时,它会正确重命名

bind_cols(df1, df2)

注意:不建议在 data.frame 中使用相同的列名,因此我们可以使用 make.unique 更改列名


如果我们有两个行数不相等的数据集

library(rowr)
cbind.fill(df1, df2new, fill = NA)
#   A  B  E  H    A    B
#1 x1 x2 x3 x6   y1   y2
#2 x1 x2 x4 x7   y1   y2
#3 x1 x2 x5 x8 <NA> <NA>

或者使用 base R

mxn <- max(nrow(df1), nrow(df2new))
df2new[(nrow(df2new)+1):mxn,] <- NA
cbind(df1, df2new)
#   A  B  E  H    A    B
#1 x1 x2 x3 x6   y1   y2
#2 x1 x2 x4 x7   y1   y2
#3 x1 x2 x5 x8 <NA> <NA>

数据

df1 <- structure(list(A = c("x1", "x1", "x1"), B = c("x2", "x2", "x2"
), E = c("x3", "x4", "x5"), H = c("x6", "x7", "x8")),
    class = "data.frame", row.names = c(NA, 
-3L))

df2 <- structure(list(A = c("y1", "y1", "y1"), B = c("y2", "y2", "y2"
)), class = "data.frame", row.names = c(NA, -3L))

df2new <- structure(list(A = c("y1", "y1"), B = c("y2", "y2")), class = "data.frame", row.names = c(NA, 
-2L))

关于r - 不带任何键并排粘贴 2 个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61827393/

相关文章:

r - 如何避免在 R data.table fwrite 1.9.7 中将日期转换为 idate?

algorithm - 在运行时合并两个排序数组比 O(N) 更快

r - 根据组属性创建虚拟变量

r - 当一些图有图例而其他图没有时,在 ggplot2 中对齐多个图

r - 将数据框中定义的间隔映射到向量

Java:合并 2 "beans"以生成一个新的

r - 如何对顺序事件时间序列进行分组(事件之间有中断)以查找事件的持续时间

r - 根据多种条件填充单元格数据框

r - 将元素添加到 R 中的 data.frames 命名列表

python - Pandas 合并、缩放和旋转长格式和宽格式数据帧