将三个数据帧中的列一一组合

Posted

技术标签:

【中文标题】将三个数据帧中的列一一组合【英文标题】:Combining columns one by one from three dataframes 【发布时间】:2020-01-11 18:59:15 【问题描述】:

我有三个数据框,例如,第一个有变量x1x2x3。第二个有y1y2y3,最后一个有z1z2z3 列。我想用这样的顺序创建一个数据框:

x1 y1 z1 x2 y2 z2 x3 y3 z3
x1 <- c(1:10)
x2 <- c(1:10)
x3 <- c(11:20)
x <- data.frame(cbind(x1,x2,x3))

y1 <- c(1:10)
y2 <- c(1:10)
y3 <- c(11:20)
y <- data.frame(cbind(y1,y2,y3))

z1 <- c(1:10)
z2 <- c(1:10)
z3 <- c(11:20)
z <- data.frame(cbind(z1,z2,z3))

三个数据框有更多的列(15),我想要一个有那些,第二个有秒......

【问题讨论】:

你能把你的数据和你的代码放在你尝试的地方吗 请让您的问题可重现。数据帧的长度是多少?它们是否具有可用于合并它们的公共键(ID 列)?如果没有,rbind他们。还包括您尝试过的内容 【参考方案1】:

假设您在每个数据框中有相同数量的行,您可以cbind 他们,删除字符并使用order

df <- cbind(df1, df2, df3)
df[, order(gsub("[A-Za-z]", "", names(df)))]

#  x1 y1 z1 x2 y2 z2 x3 y3 z3
#1  1  1  1  6  6  6 11 11 11
#2  2  2  2  7  7  7 12 12 12
#3  3  3  3  8  8  8 13 13 13
#4  4  4  4  9  9  9 14 14 14
#5  5  5  5 10 10 10 15 15 15

数据

df1 <- data.frame(x1 = 1:5, x2 = 6:10, x3 = 11:15)
df2 <- data.frame(y1 = 1:5, y2 = 6:10, y3 = 11:15)
df3 <- data.frame(z1 = 1:5, z2 = 6:10, z3 = 11:15)

【讨论】:

以上是关于将三个数据帧中的列一一组合的主要内容,如果未能解决你的问题,请参考以下文章

组合2个字符串的最快方法,将字符串从第二列交错到整个数据帧中的第一列

过滤包含Scala Spark数据帧中数组的列中的数组长度[重复]

如何根据一个数据帧中的列值和R中另一个数据帧的列标题名称有条件地创建新列

删除pandas数据帧中的重复项后,替换特定的列值

在R中的数据帧中动态地重新排序列

当列表值与Pyspark数据帧中的列值的子字符串匹配时,填充新列