R编程 - 按列合并数据

时间:2017-06-30 16:12:31

标签: r packages

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

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

                                 |   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()方法得到的最终输出类似。

first answer given对我来说很合适,但是为每个列分配了一个小的新列名称问题,而不是保留原始列标题。

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

2 个答案:

答案 0 :(得分:2)

可能不是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])
}

答案 1 :(得分:1)

要修复列名称要求,您可以执行此操作。基本上,您首先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