簡體   English   中英

根據行名和列名排列矩陣

[英]Arrange a matrix with regard to the rownames and colnames

圖像我們有一個矩陣,M * N,M行和N列,例如

  b a d c e
a 2 1 4 3 5
b 3 2 5 4 6
c 1 3 3 2 4

我想編寫一個函數,在上面的矩陣中返回以下矩陣:

  a b c d e
a 1 2 3 4 5
b 2 3 4 5 6
c 3 1 2 3 4

如果矩陣M * M的第一部分,在這種情況下3 * 3就行名和共名而言是對稱的,總共3 * 5,則其余3 * 2矩陣將被推入。

對於N <= M並且所有行名都包含在列名中的N x M矩陣,這會將具有行名中存在的名稱的列以與行名相同的順序排到最前面,而其余的保留此后按原始順序排列列:

mat_ord <- function(mx) mx[, c(rownames(mx), setdiff(colnames(mx), rownames(mx)))]
mat_ord(mx)

生產:

  a b c d e
a 1 2 3 4 5
b 2 3 4 5 6
c 3 1 2 3 4    

要了解差異,請考慮mx2 ,其行和列的排序方式與mx不同:

  e a b d c
b 6 2 3 5 4
a 5 1 2 4 3
c 4 3 1 3 2    

並通過mat_ord(mx2)得到:

  b a c e d
b 3 2 4 6 5
a 2 1 3 5 4
c 1 3 2 4 3

更新:這將對行和列進行排序,同時確保前N個列/行的對稱性:

mat_ord2 <- function(mx) mx[sort(rownames(mx)), c(sort(rownames(mx)), sort(setdiff(colnames(mx), rownames(mx))))]
mat_ord2(mx2)

生產:

  a b c d e
a 1 2 3 4 5
b 2 3 4 5 6
c 3 1 2 3 4

暫無
暫無

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

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