我在 R 中有两个(或更多)相同尺寸的表。
table1 <- as.table(matrix("TOP", nrow=4, ncol=2 ))
table2 <- as.table(matrix("BOTTOM", nrow=4, ncol=2 ))
> table1
A B
A TOP TOP
B TOP TOP
C TOP TOP
D TOP TOP
> table2
A B
A BOTTOM BOTTOM
B BOTTOM BOTTOM
C BOTTOM BOTTOM
D BOTTOM BOTTOM
我想逐行将它们绑定在一起。相比之下,rbind
给了我
> rbind(table1,table2)
A B
A "TOP" "TOP"
B "TOP" "TOP"
C "TOP" "TOP"
D "TOP" "TOP"
A "BOTTOM" "BOTTOM"
B "BOTTOM" "BOTTOM"
C "BOTTOM" "BOTTOM"
D "BOTTOM" "BOTTOM"
当我想要的是
> something(table1,table2, byrow=TRUE)
A B
A "TOP" "TOP"
A "BOTTOM" "BOTTOM"
B "TOP" "TOP"
B "BOTTOM" "BOTTOM"
C .....
答案 0 :(得分:4)
使用“gdata”软件包中的interleave
:
> library(gdata)
> interleave(table1, table2)
A B
A "TOP" "TOP"
A "BOTTOM" "BOTTOM"
B "TOP" "TOP"
B "BOTTOM" "BOTTOM"
C "TOP" "TOP"
C "BOTTOM" "BOTTOM"
D "TOP" "TOP"
D "BOTTOM" "BOTTOM"
答案 1 :(得分:1)
我喜欢@Ananda的解决方案。如果你想坚持基础R:
t(mapply(rbind, table1, table2))
虽然还不完全清楚最终目标是什么,但我猜你正在多次调用table
,然后想要让它们很好地统一。
使用data.table
可能更容易,然后您只需运行
myDT[..., table(<variables>), by=<someFactor>]
答案 2 :(得分:0)
另一种手工制作的尝试:
stopifnot(nrow(table1)==nrow(table2))
interleaved <- rep(seq(nrow(table1)),each=2)+c(0,nrow(table1))
rbind(table1,table2)[interleaved,]