簡體   English   中英

如何計算不同大小的多個向量/矩陣的所有可能組合並同時求和列?

[英]How to compute all possible combinations of multiple vectors/matrices of different sizes and sum up columns simultaneously?

假設我有三個矩陣...

A=matrix(c("a",1,2),nrow=1,ncol=3)
B=matrix(c("b","c",3,4,5,6),nrow=2,ncol=3)
C=matrix(c("d","e","f",7,8,9,10,11,12),nrow=3,ncol=3)

我想找到第1列(字符或名稱)的所有可能組合,同時對第2列和第3列求和。結果將是一個長度等於可能組合總數的單個矩陣,在這種情況下為6。像下面的矩陣...

Result <- matrix(c("abd","abe","abf","acd","ace","acf",11,12,13,12,13,14,17,18,19,18,19,20),nrow=6,ncol=3)

我不知道如何在此問題中添加表格,否則我將更描述性地顯示它。 先感謝您。

您正在矩陣中混合characternumeric值,這會將所有元素強制轉換為character 最好將矩陣定義為數字並將character值保留為行名:

A <- matrix(c(1,2),nrow=1,dimnames=list("a",NULL))
B <- matrix(c(3,4,5,6),nrow=2,dimnames=list(c("b","c"),NULL))
C <- matrix(c(7,8,9,10,11,12),nrow=3,dimnames=list(c("d","e","f"),NULL))
#put all the matrices in a list
mlist<-list(A,B,C)

然后,我們使用MapReducelapply魔術:

res <-  Reduce("+",Map(function(x,y) y[x,],
               expand.grid(lapply(mlist,function(x) seq_len(nrow(x)))),
               mlist))

最后,我們建立行名

rownames(res)<-do.call(paste0,expand.grid(lapply(mlist,rownames)))
#    [,1] [,2]
#abd   11   17
#acd   12   18
#abe   12   18
#ace   13   19
#abf   13   19
#acf   14   20

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM