我有大量不同大小的矩阵。这是前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
并将它们放入更大的data.frame,看起来像这样
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
.
.
.
我尝试了循环,我尝试识别相同的colnames然后将值放在此列和适当的行中但是它需要花费很多时间,因为我有许多大小为500x1100且更大且输出data.frame的矩阵超过50.000列。我希望输出是data.frame,因为我不知道我应该在矩阵中使用多少行,因为输入矩阵在627个元素的大列表中,每个矩阵有不同的行数,所以要得到完整的数量我不得不另外制作一个我不想要的循环。
这是我尝试的代码(仅用于列表中的一个矩阵,对于每个矩阵,还有一个用于循环):
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]
}
}
}
}
注意:矩阵和数据框不是我的变量名称我知道矩阵也是函数。
感谢您的帮助!
答案 0 :(得分:1)
使用包data.table:
,这很容易且相对有效Having
答案 1 :(得分:0)
如果你的意思是像sql外连接一样加入你应该使用合并这也在How to join (merge) data frames (inner, outer, left, right)?中描述
快速示例如下:
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)
,结果就像
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