【问题标题】:Is there something like a pmax index?有类似 pmax 指数的东西吗?
【发布时间】:2011-11-22 00:13:41
【问题描述】:

我有一个包含以下数据的数据框:

date=strptime(c(20110101,20110102,20110103,20110104,20110105,20110106),'%Y%m%d')
rate1=c(1,2,3,4,5,6)
rate2=c(2,1,3,6,8,4)
rate3=c(4,1,3,6,8,3)
rate4=c(7,8,9,2,1,8)
z=data.frame(date,rate1,rate2,rate3,rate4)
z$max=pmax(rate1,rate2,rate3,rate4)

pmax 函数允许我获取该记录的最大值,但我想知道如何获取该记录的最大值的索引。

如果 z$max 等于 7,8,9,6,8,8,我想得到 5,5,5,3,3,5

这可能吗?我知道这看起来很简单,但我在任何地方都找不到答案。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    你可以使用max.col:

    > z$max = max.col(z[2:5])+1
    > z
            date rate1 rate2 rate3 rate4 max
    1 2011-01-01     1     2     4     7   5
    2 2011-01-02     2     1     1     8   5
    3 2011-01-03     3     3     3     9   5
    4 2011-01-04     4     6     6     2   3
    5 2011-01-05     5     8     8     1   3
    6 2011-01-06     6     4     3     8   5
    

    我认为你的意思是你想要索引,但你只使用 4 个向量,所以要找到你想要的,你必须找到索引然后添加 1。

    【讨论】:

    • 谢谢,非常简单。
    • 不要忘记查看文档,因为该函数有一个参数 ties.method=c("random", "first", "last") 并且默认使用方法 random
    【解决方案2】:

    在基础 R 中非常简单:

    z$wmax <- apply(z[, -c(1,6)],1, which.max)
    

    实际上,由于我排除了第一列,因此这比您要求的要少 1,但可以通过添加一个轻松解决。

    z$max_col_n <- apply(z[, -c(1,6)],1, which.max) +1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-15
      • 2014-09-22
      • 2010-11-29
      • 2020-03-26
      • 2011-10-18
      • 2023-03-09
      • 2011-04-04
      • 1970-01-01
      相关资源
      最近更新 更多