2

データ フレームの列の値が新しい高値であるかどうかを判断する関数を作成しようとしています。たとえば、次のデータがあるとします。

x <- rnorm(10,100,sd=5)
x <- data.frame(x)

以前のすべての値のみを考慮した新しい列で TRUE または FALSE を返すにはどうすればよいですか。結果のテーブルは次のようになります。

           x   new.max
1  102.42810   NA
2  109.22762   TRUE
3  101.97970   FALSE
4  101.49303   FALSE
5   93.30595   FALSE
6   96.77199   FALSE
7  110.96441   TRUE
8   96.27485   FALSE
9  101.77163   FALSE
10 100.78992   FALSE

私が試したら

x$new.max <- ifelse ( x$x == max(x$x) , TRUE, FALSE )

前のすべての値のサブセットではなく、列全体の最大値を計算する結果の表を以下に示します。

           x new.max
1  102.42810   FALSE
2  109.22762   FALSE
3  101.97970   FALSE
4  101.49303   FALSE
5   93.30595   FALSE
6   96.77199   FALSE
7  110.96441   TRUE
8   96.27485   FALSE
9  101.77163   FALSE
10 100.78992   FALSE
4

1 に答える 1

4

と呼ばれる実行中の最大値を計算する組み込み関数がありcummax()ます。

diff(cummax(x))は、新しい最大値が達成される位置で非ゼロになります (x常に新しい最大値である の最初の要素のエントリはありません)。

ピースをまとめる:

new.max <- c(TRUE, diff(cummax(x)) > 0)

最初の要素を に設定しましたがTRUE、そのままでも構いませんNA

于 2012-01-22T08:46:35.560 に答える