R:在列表中添加项

时间:2015-10-08 04:30:02

标签: r list subset

dput(dat)
list(structure(c(0, 0, -1, -2, -1, -2, -1, -2, 0, 2, 99, 0, -1, 
-2, -1, -2), .Dim = c(2L, 8L), .Dimnames = list(c("type1", "type2"
), c("A", "B", "C", "D", "E", "F", 
"G", "H"))), structure(c(1, 2, 1, 2, 1, 2, 1, 2, 
1, 2, 99, 0, 1, 3, 1, 3), .Dim = c(2L, 8L), .Dimnames = list(
    c("type1", "type2"), c("A", "B", "C", 
    "D", "E", "F", "G", "H"))))

>dat
[[1]]
      A  B  C  D E  F  G  H
type1 0 -1 -1 -1 0 99 -1 -1
type2 0 -2 -2 -2 2  0 -2 -2

[[2]]
      A B C D E  F G H
type1 1 1 1 1 1 99 1 1
type2 2 2 2 2 2  0 3 3

假设我上面列出了2个项目。每个项目包含2x8 data.frame。我想

1)总结2 type1中每列的data.frames值(但将99s视为0)

2)如果type1值为0,则保留其对应的type2值。如果type1值不等于0,则将其type2值设置为0.

3)总结type2

中每列的data.frames

4)计算每列的type1值= 0并总结(这是type1_0行)

结果应如下所示

            A B C D E F G H
    type1   1 0 0 0 1 0 0 0     
    type2   0 0 0 0 2 0 0 0
  type1_0   1 0 0 0 1 0 0 0

1 个答案:

答案 0 :(得分:1)

我们遍历listlapply(dat,..),将第二行('type2')更改为0,表示非0的所有'type1',replace 99为0 ,并将相应的元素与Reduce相加。我们提取'type1'行,即第一行lapplyrbind,转换为逻辑矩阵(! - 为0返回TRUE,其他值返回FALSE),得到{{1 }和colSums与'res1'。

rbind