簡體   English   中英

R - 根據列名和行名提取子矩陣

[英]R - extract submatrix based on column names and row names

我有一個矩陣, R的形式如下。

       0 0.44 0.77 0.88 0.99
0   1.00 0.75 0.50 0.25    0
0.5 0.75 0.75 0.50 0.25    0
0.6 0.50 0.50 0.25 0.25    0
0.8 0.00 0.00 0.00 0.00    0

這里,

colnames(R)
[1] "0"    "0.44" "0.77" "0.88" "0.99"

rownames(R)
[1] "0"   "0.5" "0.6" "0.8"

我想根據 R 的列名和行名的不同組合創建不同的子矩陣。例如,像這樣的矩陣

       0 0.44
0   1.00 0.75  
0.5 0.75 0.75   
0.6 0.50 0.50

或者

       0 0.44 0.77 0.88 
0   1.00 0.75 0.50 0.25
0.5 0.75 0.75 0.50 0.25 

謝謝。

你可以試試下面的代碼

cs <- combn(ncol(R),2,FUN = function(v) v[1]:v[2],simplify = F)
rs <- combn(nrow(R),2,FUN = function(v) v[1]:v[2],simplify = F)
lst <- Map(function(p) Map(function(q) R[p,q],cs),rs)

以至於

> head(lst,1)
[[1]]
[[1]][[1]]
       0 0.44
0   1.00 0.75
0.5 0.75 0.75

[[1]][[2]]
       0 0.44 0.77
0   1.00 0.75  0.5
0.5 0.75 0.75  0.5

[[1]][[3]]
       0 0.44 0.77 0.88
0   1.00 0.75  0.5 0.25
0.5 0.75 0.75  0.5 0.25

[[1]][[4]]
       0 0.44 0.77 0.88 0.99
0   1.00 0.75  0.5 0.25    0
0.5 0.75 0.75  0.5 0.25    0

[[1]][[5]]
    0.44 0.77
0   0.75  0.5
0.5 0.75  0.5

[[1]][[6]]
    0.44 0.77 0.88
0   0.75  0.5 0.25
0.5 0.75  0.5 0.25

[[1]][[7]]
    0.44 0.77 0.88 0.99
0   0.75  0.5 0.25    0
0.5 0.75  0.5 0.25    0

[[1]][[8]]
    0.77 0.88
0    0.5 0.25
0.5  0.5 0.25

[[1]][[9]]
    0.77 0.88 0.99
0    0.5 0.25    0
0.5  0.5 0.25    0

[[1]][[10]]
    0.88 0.99
0   0.25    0
0.5 0.25    0

數據

R <- structure(c(1, 0.75, 0.5, 0, 0.75, 0.75, 0.5, 0, 0.5, 0.5, 0.25, 
0, 0.25, 0.25, 0.25, 0, 0, 0, 0, 0), .Dim = 4:5, .Dimnames = list(
    c("0", "0.5", "0.6", "0.8"), c("0", "0.44", "0.77", "0.88", 
    "0.99")))

暫無
暫無

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

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