是否有类似pmax指数的东西?

the*_*ist 5 r dataframe

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

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)
Run Code Online (Sandbox Code Playgroud)

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

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

这可能吗?我知道这似乎很简单,但我无法在任何地方找到答案.

Gal*_*led 13

你可以使用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
Run Code Online (Sandbox Code Playgroud)

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

  • 不要忘记查看文档,因为该函数有一个参数`ties.method = c("random","first","last")`并且默认使用方法`random`. (2认同)

42-*_*42- 4

基础 R 非常简单:

z$wmax <- apply(z[, -c(1,6)],1, which.max)
Run Code Online (Sandbox Code Playgroud)

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

z$max_col_n <- apply(z[, -c(1,6)],1, which.max) +1
Run Code Online (Sandbox Code Playgroud)