【发布时间】:2016-04-07 00:12:37
【问题描述】:
我有一个 矩阵 列表或类似矩阵的列表。每个矩阵包含许多 NA。 现在我想将所有矩阵添加到一个矩阵中。 (每个矩阵都有相同的维度和名称)
a
V1 V2 V3
[1,] NA 4 21
[2,] NA NA 4
b
V1 V2 V3
[1,] NA NA 1
[2,] 5 0 12
# mylist = list(a,b)
计算后,我想要一个类似的结果
V1 V2 V3
[1,] NA 4 22
[2,] 5 0 16
所以我有两个限制:
constraint 1: keep (NA+NA)=NA
constraint 2: keep (NA+1) = 1
我已尝试下页中的Reduce 和apply(simplify2array(.list), c(1,2), sum, na.rm=T) 函数,但我无法在计算中同时保留这两个约束。
就个人而言,使用上面的示例,我使用is.na 来识别每个矩阵中的所有NA,重叠每个元素的逻辑值 (a+b) ,表示如果对应的单元格都是 NA,则返回 length(mylist ),比如说2。然后用NA替换相应的celss
c = is.na(a) return
V1 V2 V3
[1,] 1 0 0
[2,] 1 1 0
d = is.na(b) return
V1 V2 V3
[1,] 1 1 0
[2,] 0 0 0
identify.na = c + d return
V1 V2 V3
[1,] 2 1 0
[2,] 1 1 0
result[identify.na==2] = NA
example 不是 R 中的确切代码,只是举例。 提前致谢。
【问题讨论】: