R 通过colname标识填充矩阵

R 通过colname标识填充矩阵,r,matrix,matching,R,Matrix,Matching,我有很多样本,每个样本都有相应的丰度矩阵。根据这些丰度矩阵,我想创建一个大型矩阵,其中包含行中每个样本的丰度信息 例如,单个丰度矩阵如下所示: A B C D sample1 1 3 4 2 其中A、B、C和D表示列名称,丰度为行值 我想通过匹配colname值来填充较大的矩阵,该矩阵将所有可能的字母(A:Z)和所有可能的样本(sample1:sampleN)作为colname行 例如: A B C D E F G ...

我有很多样本,每个样本都有相应的丰度矩阵。根据这些丰度矩阵,我想创建一个大型矩阵,其中包含行中每个样本的丰度信息

例如,单个丰度矩阵如下所示:

           A  B  C  D 
sample1    1  3  4  2
其中A、B、C和D表示列名称,丰度为行值

我想通过匹配colname值来填充较大的矩阵,该矩阵将所有可能的字母(A:Z)和所有可能的样本(sample1:sampleN)作为colname行

例如:

         A  B  C  D  E  F  G ....  Z
sample1  1  3  4  2  NA NA NA ....
sample2  NA NA 2  5  7  NA NA ....
sample3  4  NA 6  9  2  NA 2 .....
....
sampleN
不同的样品具有不同的丰度组合,没有保证顺序


当迭代添加到这个较大的矩阵时,我如何确保正确的列由正确的丰度值填充(例如,列“A”仅由不同样本中对应于“A”丰度的值填充)?谢谢

开始数据,稍微更改以突出差异:


m1您应该能够利用矩阵索引,如下所示:

big[cbind(rownames(abun),colnames(abun))] <- abun

使用
purr
包中的
reduce
dplyr
包中的
union\u all
的另一种解决方案:

library(purrr)
library(dplyr)

sample_names <- c("sample1","sample2","sample3")

达斯·维达,我并不着急(或者甚至认为我的问题是你应该接受的),但你还没有接受你之前问题的任何答案。如果有人回答你的问题,请;这样做不仅给回答者提供了一些观点,也为有类似问题的读者提供了一些结尾。虽然你只能接受一个答案,但你可以选择增加你认为有帮助的选票。(如果仍然存在问题,您可能需要编辑问题并提供更多详细信息。)
library(purrr)
library(dplyr)

sample_names <- c("sample1","sample2","sample3")
num1 <- round(runif(runif(1,min = 1, max = 10),min = 1, max = 10))
df1 <- data.frame(t(num1))
colnames(df1) <- sample(LETTERS,length(num1))

num2 <- round(runif(runif(1,min = 1, max = 10),min = 1, max = 10))
df2 <- data.frame(t(num2))
colnames(df2) <- sample(LETTERS,length(num2))

num3 <- round(runif(runif(1,min = 1, max = 10),min = 1, max = 10))
df3 <- data.frame(t(num3))
colnames(df3) <- sample(LETTERS,length(num3))
A <- reduce(list(df1,df2,df3),union_all)
col_order <- sort(colnames(A),decreasing = FALSE)
A <- A[,col_order]
rownames(A) <- sample_names
> A
         A  C  E  F  O  P  Q  U  W  Y
sample1  9 NA NA NA  9 NA  5  6 NA NA
sample2 NA NA NA NA  5  4 NA NA  5 NA
sample3 NA  6  5  9 NA NA  3 NA  5  7