【问题标题】:How to find matrix with most rows in a list-of-matrices, then make all the matrices have those dimensions?如何在矩阵列表中找到具有最多行的矩阵,然后使所有矩阵都具有这些维度?
【发布时间】:2014-05-26 06:55:45
【问题描述】:

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

我的目标是找到列表中维度最大的元素,并将列表中的其他元素与该引用元素进行比较,并将缺失的行名称添加到另一个坐标中,其值对应于零。

有人可以帮我在 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

【问题讨论】:

    标签: r matrix


    【解决方案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))
    }
    

    【讨论】:

    • 我觉得应该是rbind,行名会怎么样?
    • 我以为您的列表被称为 X。错误已更正。查看我的第 4 行和第 6 行的行名处理。
    【解决方案2】:

    这也可以通过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))))
    

    【讨论】:

      猜你喜欢
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多