在R中逐行“合并”表

时间:2013-03-22 18:26:27

标签: r

我在 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 .....

3 个答案:

答案 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,]