Gibt es so etwas wie einen pmax-Index?

  • Ich habe einen Datenrahmen mit folgenden Daten:

     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)
     

    Die pmax Mit der Funktion kann ich den Maximalwert für diesen Datensatz abrufen, aber ich habe mich gefragt, wie ich den Index des Maximalwerts für diesen Datensatz abrufen kann.

    Wobei z $ max gleich 7,8,9,6,8,8, ich würde gerne 5,5,5,3,3,5

    Ist das möglich? Ich weiß, das scheint etwas einfaches zu sein, aber ich kann die Antwort nirgendwo finden.

    22 November 2011
    thequerist
2 answers
  • Sie können [&&1 && verwenden. ] :

     > 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
     

    Ich denke, Sie meinen, Sie wollten den Index, aber Sie verwenden dort nur 4 Vektoren Um das zu finden, was Sie möchten, müssen Sie den Index suchen und dann 1 hinzufügen.

    22 November 2011
    GalledTom
  • Sehr einfach in Basis R:

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

    Tatsächlich gibt Ihnen das 1 weniger als das, was Sie haben Ich fragte nach, da ich die erste Spalte ausgeschlossen habe. Dies kann jedoch leicht durch Hinzufügen einer Spalte behoben werden.

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