2016-05-25 1 views
1

次のコードは、testを、減少、増加、または変化しない番号に分割します。R:変更に先立つ値

test <- c(1,2,3,4,5,5,4,1,2,3) 
ifelse(diff(test)>0, "up", ifelse(diff(test)<0, "down", "no change")) 

[1] "up" "up" "up" "up" "no change" "down" "down" "up" "up" 

しかし、むしろ、変更の結果を得るよりも、私は変更の前の数字を反映するために"up""down"または"no change"を必要としています。

たとえば、上記のセットの最後の1は、より高い数字が続くので上になります。

私はさまざまなラグを試しましたが、ifステートメントのロジックは変更されていないため、機能しませんでした。これを行う方法はありますか?

編集:それは次の変化がないため

予想出力は上記の例に示す出力に類似している、むしろ全く前身を有しないにより、それに最初の数を落とすよりも、最後の数字は除外されています。

本当に意味があることを願っていますが、そうでない場合は、さらに明確にするために最善を尽くします。

+4

明確にするために、期待される結果の完全なベクトルは何ですか? – JasonAizkalns

+0

編集ごとに、それは遠近法の問題ではありませんか?出力は同じではないでしょうか? –

+0

@JasonAizkalnsと同じ質問がまだあります。何を探していますか?最終結果のベクトル – 989

答えて

2

diff(x)は、xよりも小さい長さ1の配列を返します。つまり、diff(x)[i]=x[i+1]-x[i]です。あなたがこれを "前i + 1"の変化か "後i"の変化が何の違いもないと考えるかどうかは、依然として同じ値です。

入力と同じ長さの配列を取得したい場合は、c("no change", result)またはc(result, "no change")のいずれかを試してみてください。結果は入力と同じ長さになります。 "が最初のエントリの前に発生するか、または最後のエントリの後に"変更なし "が発生することを示します。私はこれらのどれがあなたが望むものか分かりませんが、それは2つのうちの1つでなければなりません。

+0

ありがとう!それはここの長い一日の終わりにあり、その単純な解決策は全く私には起こりませんでした。 – youjustreadthis

関連する問題