我有两个数据集,两个都有相同的维度,并希望将它们组合起来,使第二个数据集的第一列堆叠在第一个数据集的第一列旁边,依此类推。
考虑下面的例子,这是预期的输出。这里,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对我来说很合适,但是为每个列分配了一个小的新列名称问题,而不是保留原始列标题。
另外,我没有足够的声誉来为接受的答案添加评论。
答案 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