【问题标题】:How to attribute existing colnames to a new matrix/dataframe如何将现有的列名归因于新的矩阵/数据框
【发布时间】:2016-07-01 11:32:37
【问题描述】:

我们有一个矩阵 W 和一个包含 2500 个矩阵 B 的列表,每个矩阵 B(从 1 到 2500)都有不同的列名(chr [1..80])。

  • W (nrow=100000, ncol=80)
  • 每个矩阵 B (nrow=1000, ncol=80)

对于这个列表的每个元素,我们必须创建相同的矩阵 W(我们已经拥有)但具有相应的 B 列名称。

【问题讨论】:

  • 我们可以使用Map,即Map(function(x,y) {colnames(x) <- y; x}, replicate(length(lst), W, simplify=FALSE), lapply(B, colnames))

标签: r matrix


【解决方案1】:

我们可以将“W”矩阵replicate 转换为“W”矩阵的list,其中list 的长度等于“B”矩阵的listlength,即“lst”。我们使用lapply 从“lst”中的每个“B”矩阵中提取列名。然后,将这两个作为参数传递给Map,并将'W'矩阵的list的列名分配给对应的列名list

res <-  Map(function(x,y) {
         colnames(x) <- y
         x}, replicate(length(lst), W, simplify=FALSE),
          lapply(B, colnames))

lapply(res, head, 2)
#[[1]]
#    A  B  C  D  E
#[1,] 1 21 41 61 81
#[2,] 2 22 42 62 82

#[[2]]
#    F  G  H  I  J
#[1,] 1 21 41 61 81
#[2,] 2 22 42 62 82

'lst'中'B'矩阵的列名是

lapply(lst, colnames)
#[[1]]
#[1] "A" "B" "C" "D" "E"

#[[2]]
#[1] "F" "G" "H" "I" "J"

注意:这里我使用了一个包含 5 列的小型数据集,用于“B”和“W”矩阵以及长度为 2 的 list

数据

lst <- list(matrix(1:25, ncol=5, dimnames=list(NULL, 
   LETTERS[1:5])), matrix(26:50, ncol=5, 
      dimnames=list(NULL, LETTERS[6:10]))) 
W <- matrix(1:100, ncol=5)

【讨论】:

  • 抱歉,我们似乎无法让它工作。这是对我们问题的更详细解释:我们有一个列表 « B »,其中每个元素 B[i] (i 1:2500 ) 都是一个矩阵。对于每个矩阵 B[i],我们要提取其列名(每个 i 不同)并将其插入 W。因此创建了一个包含 2500 个矩阵 W[i] 的列表,其中每个 W 相等但具有 B[i 的相应列名]
  • @marie-odile28 这是基于您的描述,我在此基础上添加了一些数据。这个对我有用。 list 对象是 lst。对你来说可能是B
  • @marie-odile28 您可以查看我的示例和输出。它按照您的描述进行。顺便说一句,您没有提供任何可重现的示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多