簡體   English   中英

匹配的rownames等於colnames(對稱或非對稱矩陣)

[英]Matching rownames that are equal to colnames (of a symmetric or asymmetric matrix)

我正在對R中的距離矩陣進行統計分析,並希望比較個體之間和群體之間的距離。 我有一個矩陣,其中一些colnames等於一些rownames。 我想提取滿足此條件的值(問題是使其在非對稱矩陣上工作)。 如果代碼可以保存具有符合條件的邏輯值的矩陣,那將是很棒的)

下面顯示了一個較小矩陣的示例:

       1         2         3         4
1 0.4966143 0.8359290 0.7319204 0.7579902
3 0.7002979 0.8621343 0.5152356 0.7875813
4 0.7406555 0.8371479 0.7103873 0.5530200

我希望它最終像這樣

       1         2         3         4
1    TRUE      FALSE     FALSE     FALSE
3   FALSE      FALSE     TRUE      FALSE
4   FALSE      FALSE     FALSE      TRUE

如果我能做到沒有任何循環,只需矢量化代碼,我會很高興

我們可以使用outer

out <- outer(row.names(m1), colnames(m1), `==`)
dimnames(out) <- dimnames(m1)
out
#     1     2     3     4
#1  TRUE FALSE FALSE FALSE
#3 FALSE FALSE  TRUE FALSE
#4 FALSE FALSE FALSE  TRUE

rep licate的rownames和列名,使length享有平等,然后做一個==

`dim<-`(row.names(m1)[row(m1)] == colnames(m1)[col(m1)], dim(m1))

注意:正如@NelsonGon建議的那樣,當我們將數據( read.table/read.csv等)作為data.frame ,列名稱可以附加前綴X因為這些是非規范名稱,即以數字開頭。 要避免這種情況,請在read.table/read.csv或post過程中使用check.names = FALSE參數,方法是更改​​列名

outer(row.names(df), sub("^X","",names(df)),"==")

假設'df'是data.frame標識符對象

數據

m1 <- structure(list(`1` = c(0.4966143, 0.7002979, 0.7406555), 
                     `2` = c(0.835929,  0.8621343, 0.8371479), 
                     `3` = c(0.7319204, 0.5152356, 0.7103873), 
                     `4` = c(0.7579902, 0.7875813, 0.55302)), 
                class = "data.frame", 
                row.names = c("1", "3", "4"))

暫無
暫無

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

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