0

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

3 回答 3

4

interleave从“gdata”包中使用:

> 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"
于 2013-03-22T18:31:05.290 回答
1

我喜欢@Ananda 的解决方案。如果您想坚持使用基础 R:

t(mapply(rbind, table1, table2))

虽然尚不完全清楚最终目标是什么,但我猜您正在多次调用table,然后希望将它们很好地统一起来。

使用 a 可能更容易data.table,然后您可以简单地运行

myDT[..., table(<variables>), by=<someFactor>]
于 2013-03-22T18:48:34.387 回答
0

手工制作的另一种尝试:

stopifnot(nrow(table1)==nrow(table2))
interleaved <- rep(seq(nrow(table1)),each=2)+c(0,nrow(table1))
rbind(table1,table2)[interleaved,]
于 2013-03-22T19:49:20.587 回答