我有很大的名单。该列表的每个元素都是一个矩阵。但是矩阵的维数(它的行数)在列表的每个元素中都是不同的,但是列表的所有元素都是列表元素之一的子集。
我的目标是找到列表最大维度的元素,并将列表的其他元素与此参考元素进行比较,并将缺少的行名称添加到其他坐标,其值对应于零。
有人会帮我在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
答案 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))))