R 编程 - 按列组合数据

R Programming - Combine Data Columnwise

我有两个数据集,都具有相同的维度,我想将它们组合起来,使第二个数据集的第一列堆叠在第一个数据集的第一列旁边,依此类推。

考虑下面的示例,这是预期的输出。在这里,v1 来自数据集 1,v2 来自数据集 2。我还想保持列 header 不变。

                                 |   v1   |   v2   | 
                                 |:------:|:------:|
                                 | -0.71  | -0.71  |
                                 | -0.71  | -0.71  |
                                 | -0.71  | -0.71  |
                                 | -0.71  | -0.71  |
                                 | -0.71  | -0.71  |
                                 | -0.71  | -0.71  |

我尝试了 cbind()data.frame(),但都导致在完整的第一个数据集之后添加第二个数据,而不是逐列添加。

 -> dim(firstDataSet)
    100 200
 -> dim(secondDataSet)
    100 200
 -> finalDataSet_cbind <- cbind(firstDataSet, secondDataSet)
 -> dim(finalDataSet_cbind)
    100 400
 -> finalDataSet_dframe <- data.frame(firstDataSet, secondDataSet)
 -> dim(finalDataSet_dframe)
    100 400

请提出正确和更好的实现方法,谢谢。


更新可能的回应duplicate flag to this question

这个答案不适合我。我按照解决方案获得的数据没有得到我想要的结果,并且与我使用上述 cbind() 方法获得的最终输出相似。

对我有用,但有一个小问题,即为每列分配新的列名,而不是保留原始列 headers。

此外,我没有足够的声誉来向已接受的答案添加评论。

可能不是 for loop 的最有效解决方案,但有效

data1 <- cbind(1:10,11:20, 21:30)
data2 <- cbind(1:10,11:20, 21:30)

combined <- NULL
for(i in 1:ncol(data1)){
  combined <-  cbind(combined, data1[,i], data2[,i])
}

要解决列名要求,您可以这样做。基本上,您首先 cbind,然后以正确的顺序创建索引。使用该索引,您还可以创建一个包含正确列名的向量。然后索引列的顺序,并添加列名。

df1 <- df2 <- data.frame(v1=1:10,v2=11:20, v3=21:30)
final <- cbind(df1,df2)

indexed <- rep(1:ncol(df1), each = 2) + (0:1) * ncol(df1)
new_colnames <- colnames(final)[indexed]
final_ordered <- final[indexed]
colnames(final_ordered) <- new_colnames

   v1 v1 v2 v2 v3 v3
1   1  1 11 11 21 21
2   2  2 12 12 22 22
3   3  3 13 13 23 23
4   4  4 14 14 24 24
5   5  5 15 15 25 25
6   6  6 16 16 26 26
7   7  7 17 17 27 27
8   8  8 18 18 28 28
9   9  9 19 19 29 29
10 10 10 20 20 30 30