【问题标题】:R - extract submatrix based on column names and row namesR - 根据列名和行名提取子矩阵
【发布时间】:2020-02-23 20:14:15
【问题描述】:

我有一个矩阵,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 

谢谢。

【问题讨论】:

  • 您能否展示一个示例预期的 ssubmatrix 输出。任何关于子矩阵维度的信息都会很棒
  • @akrun 我已经修改了问题。根据您的评论。

标签: r columnname submatrix rowname


【解决方案1】:

你可以试试下面的代码

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")))

【讨论】:

    猜你喜欢
    • 2020-07-14
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    相关资源
    最近更新 更多