[英]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.