我有一个1000个矩阵的列表,其前两个元素是:
> Bpam[1:2]
[[1]]
cluster sil_width
D.var 1 0.7445190
Hy.adu 1 0.7233527
A.cra 0 0.8563551
Cu.cir 0 0.8483707
Sp.sp 0 0.8461553
E.gad 0 0.8368920
L.elo 0 0.8341050
A.mor 0 0.8219688
H.com 0 0.7046171
S.cad 0 0.5731629
[[2]]
cluster sil_width
Hy.adu 1 0.5518385
D.var 1 0.1878755
Ab.gad 0 0.8183177
L.elo 0 0.7964595
A.cra 0 0.7964595
Cu.cir 0 0.7879583
A.mor 0 0.7667134
S.cad 0 0.5821773
H.com 0 0.5644358
请注意,行数有所不同(Bpam [[2]]中不存在“ Sp.sp”。我想创建一个n列和1,000行的矩阵(其中n是整个不同行名的总数列表)以将每个矩阵的变量簇保存在列表中,如果缺少某一行,则保存NA。 我尝试过
NA.matrix <- matrix(rep(NA, n*length(Bpam)), length(Bpam), n)
colnames(NA.matrix) <- A # char vector with names in n
#
clus.memb.p <- sapply(1:length(Bpam), function(x)
NA.matrix[x, which(colnames(NA.matrix) %in% rownames(Bpam[[x]]))]
<- Bpam[[x]][,1])
,但不返回矩阵。 任何帮助将是最欢迎的。
答案 0 :(得分:1)
我们可以merge
的{{1}}的{{1}} row.names
。使用list
,如果matrices
all = TRUE
NA
matrix
答案 1 :(得分:0)
我找到了一个非常简单的解决方案。首先,我修改了函数以生成按row.names字母顺序排列的矩阵列表:
> Bpam[1:2]
[[1]]
cluster sil_width
A.cra 0 0.81960918
A.mor 0 0.83767035
Cu.cir 0 0.82537241
D.var 0 0.05898329
H.com 0 0.55435303
Hy.adu 1 0.00000000
L.elo 0 0.83984674
S.cad 0 0.81047726
Sp.sp 0 0.80335860
[[2]]
cluster sil_width
A.cra 0 0.85243545
A.mor 0 0.88501435
Cu.cir 0 0.87372261
D.var 0 0.02317251
E.gad 0 0.85797643
H.com 0 0.89236411
Hy.adu 1 0.00000000
S.cad 0 0.88181818
Sp.sp 0 0.88836713
然后
NA.matrix <- matrix(rep(NA, n*length(Bpam)), length(Bpam), n)
colnames(NA.matrix) <- sort(A)
因此,列表中的NA矩阵和元素都分别按col和行名按字母顺序排列。现在,我使用循环来填充NA矩阵:
for (i in 1:length(Bpam)) {
NA.matrix[i, which(colnames(NA.matrix) %in% rownames(Bpam[[i]]))] <- Bpam[[i]][,1]
}
完成!