如何将较小矩阵中的数据添加到R中的大数据帧中
我有很多不同大小的矩阵。这里是前6个,您可以看到尺寸为1x1的矩阵,但也可以看到尺寸为542x1191的矩阵如何将较小矩阵中的数据添加到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 ..
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