3

max()変数のグループから最大値を抽出する関数に問題があります。次は data.frame で、すべての変数は数値です。

setosa  versicolor  virginica
    0   0.96969697  0.03030303
    0   0.05128205  0.94871795
    0   0.96969697  0.03030303
    1   0.00000000  0.00000000
    1   0.00000000  0.00000000
    0   0.05128205  0.94871795
    0   0.05128205  0.94871795
    0   0.05128205  0.94871795

このデータ フレームに関数を適用max()し、それを新しい変数に保存しようとすると、次のようになります。

DF$max=max(DF$setosa,DF$versicolor,DF$virginica)

setosa  versicolor  virginica   max
    0   0.96969697  0.03030303  1
    0   0.05128205  0.94871795  1
    0   0.96969697  0.03030303  1
    1   0.00000000  0.00000000  1
    1   0.00000000  0.00000000  1
    0   0.05128205  0.94871795  1
    0   0.05128205  0.94871795  1
    0   0.05128205  0.94871795  1

max()関数が最大値を丸めているようです。間違いが見つかりません。何が問題なのか教えてください。ありがとう。

4

3 に答える 3

3

ステートメントは、すべての要素の最大値を取得します。使用してみてくださいapply

R > dat$max <-  apply(dat, 1, max)
R > dat
  setosa versicolor  virginica      max
1      0 0.96969697 0.03030303 0.969697
2      0 0.05128205 0.94871795 0.948718
3      0 0.96969697 0.03030303 0.969697
4      1 0.00000000 0.00000000 1.000000
5      1 0.00000000 0.00000000 1.000000
6      0 0.05128205 0.94871795 0.948718
7      0 0.05128205 0.94871795 0.948718
8      0 0.05128205 0.94871795 0.948718
于 2013-04-21T21:37:30.653 に答える
3

pmaxそのために使用できます

set.seed(123)
dat <- data.frame(matrix(rnorm(15), ncol = 3))



cbind(dat,
      max = pmax(dat$X1, dat$X2, dat$X3)
)

##         X1        X2       X3     max
## 1  0.42646  0.688640 -0.69471 0.68864
## 2 -0.29507  0.553918 -0.20792 0.55392
## 3  0.89513 -0.061912 -1.26540 0.89513
## 4  0.87813 -0.305963  2.16896 2.16896
## 5  0.82158 -0.380471  1.20796 1.20796
于 2013-04-21T21:37:55.063 に答える
1

max渡されたすべての引数の最大値である単一の値を返します。したがって、データの 3 つの列すべての最大値は 1 で、これが `max が返す値です。

max(df$setosa,df$versicolor,df$virginica)
[1] 1

次に、それをdata.frameの新しい列に割り当てます。Rが設計されているため、割り当てのリサイクルが発生し、割り当てられているベクトルのサイズがいっぱいになるまで、maxから返された値が再利用されます。この場合、データ フレームの行数です。

各列の最大値が必要な場合は、

apply( df , 2 , max )
   setosa versicolor  virginica 
 1.000000   0.969697   0.948718 

max関数を各列に適用し、結果を返します。max各列の値がどの行に含まれているかを知りたい場合は、次のwhich.maxように使用します

apply( df , 2 , which.max )
 setosa versicolor  virginica 
     4          1          2 

maxまた、値を行ごとに並べたい場合は、MARGIN 引数をapply1 に設定します (ここでは、MARGIN 引数は、明示的に名前を付けるのではなく、位置一致を使用して設定します)。

df$max <- apply( df , 1 , max )
于 2013-04-21T21:36:45.597 に答える