如何将较小矩阵中的数据添加到R中的大数据帧中

如何将较小矩阵中的数据添加到R中的大数据帧中,r,matrix,dataframe,R,Matrix,Dataframe,我有很多不同大小的矩阵。这里是前6个,您可以看到尺寸为1x1的矩阵,但也可以看到尺寸为542x1191的矩阵 List of 627 $ 1 : num [1, 1] 1 ..- attr(*, "dimnames")=List of 2 .. ..$ : chr "94728_61406" .. ..$ : chr "6794602" $ 2 : num [1:2, 1:2] 1 0 0 1 ..- attr(*, "dimnames")=List of 2 ..

我有很多不同大小的矩阵。这里是前6个,您可以看到尺寸为1x1的矩阵,但也可以看到尺寸为542x1191的矩阵

List of 627
 $ 1  : num [1, 1] 1
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr "94728_61406"
  .. ..$ : chr "6794602"
 $ 2  : num [1:2, 1:2] 1 0 0 1
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:2] "132479_177215" "67496_29758"
  .. ..$ : chr [1:2] "1008667" "8009082"
 $ 3  : num [1, 1] 1
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr "132479_177215"
  .. ..$ : chr "6740421"
 $ 4  : num [1, 1] 1
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr "20825_2765"
  .. ..$ : chr "6777805"
 $ 5  : num [1:542, 1:1191] 0 0 0 0 0 0 0 0 0 0 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:542] "100090_1753055" "100140_659556" "100173_597660" "100230_231297" ...
  .. ..$ : chr [1:1191] "1001682" "1001990" "1002541" "1002790" ...
我试图从不同大小的矩阵中获取数据,为了简单起见,我重写了列名

                       A       B       C       D
12760600_512333        1       1       0       0
132479_177215          0       0       1       0
84069228_2388656       0       0       0       1


                       A       B       C       D      E
12760600_512333        0       1       0       0      1
132479_177215          1       1       1       0      0
84069228_2388656       0       0       1       1      0
然后把它们放到更大的数据框中,看起来像这样

    A   B   C   E   F   D   Q   Z   . . .
1   NA  NA  NA  NA  NA  NA  NA  NA
2   NA  NA  NA  NA  NA  NA  NA  NA
3   NA  NA  NA  NA  NA  NA  NA  NA
4   NA  NA  NA  NA  NA  NA  NA  NA
.
.
.
因此,每个输入矩阵中的列名可以由不同的列名组成,outpu数据框包含所有这些名称

输出数据框应如下所示:

    A   B   C   E   F   D   Q   Z   . . .
1   1   1   0   NA  NA  0   NA  NA
2   0   0   1   NA  NA  0   NA  NA
3   0   0   0   NA  NA  1   NA  NA
4   NA  NA  NA  NA  NA  NA  NA  NA
5   0   1   0   1   NA  0   NA  NA 
6   1   1   1   0   NA  0   NA  NA
7   0   0   1   0   NA  1   NA  NA 
.
.
.
我尝试了for循环,尝试识别相同的colname,然后将值放入此列和相应的行中,但这需要花费大量时间,因为我有许多大小为500x1100或更大的矩阵,而output data.frame有超过50000列。我希望输出是data.frame,因为我不知道我应该在矩阵中使用多少行,因为输入矩阵在627个元素的大列表中,每个矩阵有不同的行数,所以要获得完整的行数,我必须创建另一个for循环,这是我不想要的

这是我从列表中只尝试一个矩阵的代码,对于每个矩阵,应该有一个for循环:

dataframe <- as.data.frame(matrix(ncol = nlevels(data1$SKU)))
colnames(dataframe) <- levels(data1$SKU)

for (k in 1:nrow(matrix)){
  for (i in 1:ncol(matrix)){
    for (j in 1:ncol(dataframe)){
      if (colnames(matrix)[i] == colnames(matrix)[j]){
        matrix[k,j] <- dataframe[k,i]
      }
    }
  } 
}
注意:矩阵和数据框不是我的变量名,我知道矩阵也是函数


谢谢你的帮助

使用软件包数据,这很容易且相对有效。表:

L <- list(cbind(b = 10), 
  cbind(a = 1:2, b = 2:3))

library(data.table)
rbindlist(lapply(L, as.data.table), fill = TRUE)
#    b  a
#1: 10 NA
#2:  2  1
#3:  3  2

如果您的意思是像sql外部联接一样联接,那么应该使用merge,这在中也有描述

快速示例如下:

m1 <- matrix(data = c(1:5,1:5),ncol = 2)
m2 <- matrix(data = c(5:10,10:15),ncol = 2)
merge(m1,m2,all = TRUE)

在同样的意义上,plyr::rbind.filllapplyL,as.data.frameThank@Roland rbindlist也能工作!!!,但是现在我想知道如何用0替换NA,我需要一些快速的方法。因为我需要两个矩阵,一个带NAs,另一个带零。我试过:垫子
   V1 V2
1   1  1
2   2  2
3   3  3
4   4  4
5   5  5
6   5 10
7   6 11
8   7 12
9   8 13
10  9 14
11 10 15