如何在矩阵列表中找到包含大多数行的矩阵,然后使所有矩阵都具有这些维度?

时间:2014-05-26 06:55:45

标签: r matrix

我有很大的名单。该列表的每个元素都是一个矩阵。但是矩阵的维数(它的行数)在列表的每个元素中都是不同的,但是列表的所有元素都是列表元素之一的子集。

我的目标是找到列表最大维度的元素,并将列表的其他元素与此参考元素进行比较,并将缺少的行名称添加到其他坐标,其值对应于零。

有人会帮我在R中实现吗?

以下是我想要的简单示例:

> P
[[1]]
  [,1]
A    1
B    2
C    3
D    4

[[2]]
  [,1]
A    1
B    2
D    3

[[3]]
  [,1]
B    1
C    2

预期输出为:

> P
[[1]]
  [,1]
A    1
B    2
C    3
D    4

[[2]]
  [,1]
A    1
B    2
D    3
C    0

[[3]]
  [,1]
B    1
C    2
D    0
A    0

2 个答案:

答案 0 :(得分:1)

这应该有效:

N <- length(P)
length.max <- max(lapply(P, function(x) ncol(x)))
for (i in 1:N){
  temp <- rownames(P[[i]])
  P[[i]] <- rbind(P[[i]],matrix(0,ncol=1,nrow=length.max - ncol(P[[i]]))
  rownames(P[[i]]) <- c(temp, setdiff(LETTERS[1:length.max],temp))
}

答案 1 :(得分:1)

这也可以使用lapply

完成
P <- list(A = matrix(1:10), B = matrix(1:4), C = matrix(1:2))

longest <- max(sapply(P, nrow))
P <- lapply(P, function(x) c(x, rep(0, longest-length(x))))