2016-11-22 5 views
0

値:x1及び移入と同じ長さであるは、私は3つのベクトルを有する

x1 <- c(0.000, 0.792, 1.451, 1.802, 2.551, 2.591, 3.991, 4.321) 
x2 <- c(0.8, 2.6) 
x3 <- c(3,6,-1) 

私は別のベクター(x4)を作成しますからの値は3sとなり、x2の値が非常に近い場合はs、6sは-1sとなりますが、必ずしも同じである必要はありません。核心はx2の値が必ずしも正確に同じ、内の値の間の変更を開始するx1の値に近いことが必要ということです

x1 x4 
0.000 3 
0.792 3 #0.8 in x2 is close to 0.792 x1, so this is the last place 3 appears 
1.451 6 
1.802 6 
2.551 6 
2.591 6 #2.6 in x2 is close to 2.591 x1, so this is the last place 6 appears 
3.991 -1 
4.321 -1 

、とのコメントを追加しました:その後、x4は次のようになります。 x4にあります。 x1の値がx2に近づかない場合、x4の値はの値の間で変更されません。

申し訳ありませんが、私はそれが理にかなっていることを願っていますが、誰かがそれを行う方法を知っていれば、非常に感謝しています!

+1

downvoteは何ですか?コメントは丁寧です。 –

+0

@Brandon Bertelsen私はそれがdownvoted見たときに少しショックを受けたかもわかりません=/ –

答えて

3

あなたは結果が要因となり、用心cut

x4 <- cut(x1, c(-Inf, x2, Inf), labels = x3, right = FALSE) 

x4 
# [1] 3 3 6 6 6 6 -1 -1 
# Levels: 3 6 -1 

を使用することができます。

あなたが数値に変換したいなら、あなたが使用することができます。

as.numeric(levels(x4))[x4] 

# [1] 3 3 6 6 6 6 -1 -1 

近くにに、私はあなたが値が区間(であることを意味仮定 - 0.8にInfを、2.6から0.8、2.6にInf)

+1

それは美しく働いた!私が変更しなければならなかったのは、 'Inf'が何らかの理由で 'Inf 'で動作しなかったので' Inf'が '9999'(正と負)に変更されたことだけでした。また、小数も扱っていたので、 'x4'を' character() 'に、' numeric() 'に変更しなければなりませんでした。しかし、最後に取り組んだ、ありがとう! –

関連する問題