如何将现有的colnames归因于新的matrix / dataframe

时间:2016-03-15 20:14:49

标签: r matrix

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

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

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

1 个答案:

答案 0 :(得分:0)

我们可以replicate' W'矩阵到list的' W'长度为list的矩阵等于' B'的length list矩阵,即' lst'。我们从每个' B'中提取列名称。矩阵在' lst'使用lapply。然后,将这两个作为参数传递给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

以及&#39; B&#39;的列名在&#39; lst&#39;中的矩阵是

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

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

注意:这里我使用了一个包含5列的小型数据集,用于&#39; B&#39;和&#39; W&#39;矩阵和list长度为2.

数据

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)