0

我有一个看起来像这样的列表:

列表[[1]]

 GN  SN1  SN2      
  a   0    0      
  b   1    1     
  c   0    0    
  e   2    2     
  f   0    1    
  d   0    0

列表[[2]]

 GN  SN1  SN2      
  e   0    1      
  f   2    0     
  g   1    1    
  h   2    0     
  i   1    0    
  l   3    0

我想:首先按列将“表”函数应用于列表的每个元素(因此对于每个列表[[1]],列表[[2]],...),然后使用例如这样的行一个结构:apply(list, 1, table) (lapply for lists) 或 apply(list, 2, table) 并以相同的方式按行求和,然后按列求和。

谁能帮我?

提前致谢,

B.

4

1 回答 1

5

可能是这样的...

lapply(List, apply, 1, table) # table by row
lapply(List, apply, 2, table) # table by cols

输出不是很好。

更好的输出可能是:

list1 <- lapply(List, apply, 1, table) # table by row
list2 <- lapply(List, apply, 2, table) # table by cols

> # for list1
> lapply(list1, unlist) # output is a list
[[1]]
0 a 1 b 0 c 2 e 0 1 f 0 d 
2 1 2 1 2 1 2 1 1 1 1 2 1 

[[2]]
0 1 e 0 2 f 1 g 0 2 h 0 1 i 0 3 l 
1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 


> # for list2
> library(abind)
> # using abind function from abind package
> abind(lapply(list2, unlist), along=0)  # output is an array
     GN.e GN.f GN.g GN.h GN.i GN.l SN1.0 SN1.1 SN1.2 SN1.3 SN2.0 SN2.1
[1,]    1    1    1    1    1    1     4     1     1     3     2     1
[2,]    1    1    1    1    1    1     1     2     2     1     4     2

> # R base solution
> do.call(rbind, lapply(list2, unlist)) # output is an array
     GN.a GN.b GN.c GN.d GN.e GN.f SN1.0 SN1.1 SN1.2 SN2.0 SN2.1 SN2.2
[1,]    1    1    1    1    1    1     4     1     1     3     2     1
[2,]    1    1    1    1    1    1     1     2     2     1     4     2
于 2013-01-17T11:59:27.560 回答