2011-11-22 88 views
5

我有以下数据的数据帧:有没有像pmax索引的东西?

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 $最大将等于7,8,9,6,8,8,我想获得5,5,5,3,3,5

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

回答

3

在基础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 
+0

谢谢,也适用于which.min将证明有用! – thequerist

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 

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

+0

谢谢,非常简单。 – thequerist

+2

不要忘记阅读文档,因为该函数有一个参数'ties.method = c(“random”,“first”,“last”)',默认情况下使用'random'方法。 – Galled

+0

是的,我看到了,但谢谢你指出。 – thequerist