【问题标题】:Selecting value in matrix together with column name in R选择矩阵中的值以及R中的列名
【发布时间】:2012-12-22 14:15:42
【问题描述】:

我有一个矩阵,我想从中选择一个观察值及其列名。

如果我使用subset()matrix[]%in%,那么我会得到整行。

我只想获得那个单一的观察结果及其列名。 有没有办法做到这一点?

这是一个例子:

矩阵:

        col1 col2 col3
row 1    10   20    30 
row 2    30   30    40

现在我想选择值最高的值和列名:

max <- max(matrix)
subset(matrix, matrix==max)

这给出了输出:

        col1 col2 col3
row 2    30   30    40

但是我想得到的是:

       col3
        40

【问题讨论】:

    标签: r


    【解决方案1】:

    由于您已经知道值,您只需要获取列名。

    出于显而易见的原因,调用您的矩阵 m

    m <- matrix(c(10,30,20,30,30,40), ncol=3)
    colnames(m) <- c('col1','col2','col3')
    

    要查看哪些列包含最大值(或任何特定值)及其名称,apply 可用于返回带有名称的逻辑向量:

    apply(m==10, 2, any)
    col1  col2  col3 
    TRUE FALSE FALSE 
    
    apply(m==30, 2, any)
    col1 col2 col3 
    TRUE TRUE TRUE 
    

    which 告诉你哪些值是真的:

    which(apply(m==40, 2, any))
    col3 
       3 
    

    如果你需要的话,只是名字:

    names(which(apply(m==40, 2, any)))
    [1] "col3"
    

    【讨论】:

    • 感谢您的帮助,是的,当 max>1 和 max=1 时,我都需要一些东西来工作。
    • 在我的情况下,最大值只能在每一列中出现一次。所以我需要一些可以选择多列的东西,以防有多个最大值
    • 2 表示应用于列边距。请参阅?申请。
    • 但是 which 命令似乎不起作用:match.fun(FUN) 中的错误:缺少参数“FUN”,没有默认值
    • 括号不合适? which 不接受 FUN 参数,但 apply 接受。
    【解决方案2】:

    试试这个:

    setNames(c(m), colnames(m)[col(m)])[m == max(m)]
    

    【讨论】:

      猜你喜欢
      • 2013-11-24
      • 2021-08-04
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      相关资源
      最近更新 更多