r语言 - 我如何将多个单值行绑定到我的data.frame?



如下所示:

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。水平,…):参数的列数不匹配

有趣的是,cbindrbind都支持以下内容:

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。)

Edit3:虽然我认为cbindrbind的实现是100%类似的,但这只适用于methods::cbindmethods::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

您可以使用do.call来实现与rbind(At, 4, 5, 6)相同的输出。

At <- data.frame(col1 = 1, col2 = 2, col3 = 3)
Bt <- data.frame(col1 = c(4, 5, 6))
do.call(function(...) rbind(At, ...), as.list(Bt$col1))
#  col1 col2 col3
#1    1    2    3
#2    4    4    4
#3    5    5    5
#4    6    6    6

由于Bt$col1的长度可以是可变的,所以我使用...作为函数的参数。

rbind(At, Bt)

在这个例子中你创建了2个data.frames:

At <- data.frame(1, 2, 3)
Bt <- data.frame(c(4, 5, 6))
str(At)
'data.frame':   1 obs. of  3 variables:
$ X1: num 1
$ X2: num 2
$ X3: num 3
str(Bt)
'data.frame':   3 obs. of  1 variable:
$ c.4..5..6.: num  4 5 6

rbind要求相同的列名,但列数不同。

rbind(At, 4, 5, 6)

在这种情况下,R "完成"每一行重复整个行的每个数字,并给出一个自动名称,例如,X1。与

相同
rbind(
At,
c(4,4,4),
c(5,5,5),
c(6,6,6)
)

rbind(
At,
data.frame(X1 = 4,X2 = 4,X3 = 4),
data.frame(X1 = 5,X2 = 5,X3 = 5),
data.frame(X1 = 6,X2 = 6,X3 = 6)
)

相关内容

  • 没有找到相关文章

最新更新