簡體   English   中英

從R中的4個昏暗矩陣創建頻率矩陣

[英]create a frequency matrix from a 4 dim matrix in R

我有一個k * 4維度的矩陣,每行都是(1:20,1:20,1:20,1:20)的組合之一,並指定四倍體節點的類型。 例如對於k=3我有3個四面體,這里的節點類型

X <- matrix(c(1,  3, 1 ,4,
              2,  5, 6 ,1,
              12,20,15 ,3),   3,4,byrow=T) 

現在,我想從中創建一個暗20 * 8000的頻率表,該頻率表記錄與其余三個節點接觸的每個節點的頻率。 另一方面,我想知道四元組中的每個節點都與哪種類型的節點接觸。

例如,對於第一行,我在F的第1,(1,3,4)個中有一個,在3,(1,1,4)和4,(1,1,3)中也有一個。

我希望我能很好地解釋我的問題。 請幫助我進行此轉換的代碼

注意:由於我的X矩陣的第一行是1,3,1,4,因此輸出矩陣(F)應該在

F[1,which(colnames(F)=="1 3 4") <- F[1,which(colnames(F)=="1 3 4") +1
F[1,which(colnames(F)=="1 3 4") <- F[1,which(colnames(F)=="1 3 4") +1
F[3,which(colnames(F)=="1 1 4") <- F[3,which(colnames(F)=="1 1 4") +1
F[4,which(colnames(F)=="1 1 3") <- F[4,which(colnames(F)=="1 1 3")+1

這意味着每行的4行中的頻率矩陣要加4,而2、3或4可能相同。 例如,由於在第一行中重復了一個,因此將兩個記錄添加到F [1,((colnames(F)==“ 1 3 4”))

我不確定我是否理解,如果知道的話,那么您沒有正確執行此操作,因為您沒有正確訂購三胞胎,所以這是一個猜測。 我認為向量c(3,1,4)應該不同於向量c(1,3,4)。 如果我錯了,請糾正我。

我認為嘗試使用20 ^ 4數組過於繁瑣,因此我構建了一個適合5 ^ 4數組的輸入矩陣:

X <- matrix(c(1,  3, 1 ,4,
              2,  5, 2 ,1,
              3,  2, 5 ,4),   3,4, byrow=T) 

我們產生從每行一次取三個的4個項目的組合,並以列主要方式排列:

 array(  apply( X, 1, function(x) combn(x, 3) ), dim=c(3,4,3) )
, , 1

     [,1] [,2] [,3] [,4]
[1,]    1    1    1    3
[2,]    3    3    1    1
[3,]    1    4    4    4

, , 2

     [,1] [,2] [,3] [,4]
[1,]    2    2    2    5
[2,]    5    5    2    2
[3,]    2    1    1    1

, , 3

     [,1] [,2] [,3] [,4]
[1,]    3    3    3    2
[2,]    2    2    5    5
[3,]    5    4    4    4

我找到了我問題的基本答案。 但是我認為它並沒有達到預期的速度。

例如,我有一個昏暗的(3 * 4)矩陣,為簡單起見,我假設我只有5個類型。 為了找到這種情況的頻率表,我編寫了以下代碼:

    n <- 5
    k <- dim(X)[1]
    F <- matrix(0,n,n^3)
    colnames(F) <- simplify2array(apply(expand.grid(1:n,1:n,1:n ), 1, paste, collapse =" ", sep = ""))
    for(i in 1:k)
    {
for(j in 1:4){
per <- simplify2array(permn(X[i,-j]))
pert_charac <- apply(per,2,paste,sep="",collapse=" ")
num <- sapply(pert_charac,f <- function(x) which(colnames(F)==x))
F[X[i,j],num] <- F[X[i,j],num]+1
    }
 }

暫無
暫無

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

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