【发布时间】:2021-10-04 06:02:21
【问题描述】:
以下按预期工作:
A <- data.frame(c(1, 2, 3))
B <- data.frame(4, 5, 6)
cbind(A, B)
c.1..2..3. X4 X5 X6
1 1 4 5 6
2 2 4 5 6
3 3 4 5 6
现在我正在使用rbind 进行转置:
At <- data.frame(1, 2, 3)
Bt <- data.frame(c(4, 5, 6))
rbind(At, Bt)
这不起作用:
rbind(deparse.level, ...) 中的错误: 参数的列数不匹配
有趣的是,cbind 和 rbind 都支持以下内容:
cbind(A, 4, 5, 6)
c.1..2..3. 4 5 6
1 1 4 5 6
2 2 4 5 6
3 3 4 5 6
rbind(At, 4, 5, 6)
X1 X2 X3
1 1 2 3
2 4 4 4
3 5 5 5
4 6 6 6
后者是我对rbind(At, Bt) 的期望。
我怎样才能得到它?
Edit2:一些上下文:我有一个大电话 rbind(A1t, ..., B1t, A2t, ..., B2t, A3t),所以我更喜欢一个处理 Bit 的答案,这样我就不必修改序列rbind 的参数。 (我可以用替代方法替换 rbind。)
编辑3:
虽然我认为cbind 和rbind 的实现是100% 相似的,但这仅适用于methods::cbind 和methods::rbind。
methods::cbind:https://github.com/wch/r-source/blob/79298c4/src/library/methods/R/cbind.R#L35-L125
methods::rbind:https://github.com/wch/r-source/blob/79298c4/src/library/methods/R/rbind.R#L24-L114
base::cbind:https://github.com/wch/r-source/blob/79298c4/src/main/bind.c#L1199
base::rbind:https://github.com/wch/r-source/blob/79298c4/src/main/bind.c#L1464
cbind.data.frame:https://github.com/wch/r-source/blob/79298c4/src/library/base/R/dataframe.R#L1259
rbind.data.frame:https://github.com/wch/r-source/blob/79298c4/src/library/base/R/dataframe.R#L1262
【问题讨论】: