2017-03-08 12 views
0

数値を文字列に置き換えたい。数値の範囲は-1と1の間です。 dfの出力は以下のとおりです。負の不等式で抽出すると不正な値が返される

structure(list(m = c(-0.226, 0.11, 0.143, -0.095, -0.007, -0.232, 
-0.258, -0.438, -0.199, -0.419, -0.41, -0.271, -0.176, -0.33, 
-0.335, -0.59, -0.724, -0.161, -0.237, -0.223, -0.041, -0.627, 
-0.37, 0.055, -0.215, -0.287, -0.378, 0.006, -0.381, -0.598, 
-0.179, -0.259, 0.147, -0.08, 0.172, 0.035, -0.458, -0.254, -0.373, 
-0.319)), .Names = "m", row.names = c(NA, -40L), class = "data.frame") 

次のコードを実行すると、意図した結果が得られません。

m[m >= 0.3] <- "a" 
m[(m < 0.3 & m >= 0.2)] <- "b" 
m[(m < 0.2 & m >= 0.1)] <- "c" 
m[(m < 0.1 & m >= 0.05)] <- "d" 
m[(m < 0.05 & m >= 0)] <- "e" 
m[(m < 0 & m >= -0.05)] <- "f" 
m[(m < -0.05 & m >= -0.1)] <- "g" 
m[(m < -0.1 & m >= -0.2)] <- "h" 
m[(m < -0.2 & m >= -0.3)] <- "i" 
m[m < -0.3] <- "j" 

私も「」以下のような終わりを追加してみました:私は、コードはかなり自明であると考えてい

m[m < -0.3,] <- "j" 

:私は範囲内の値を変更したいです文字列で指定します。 負の値の不等号は機能していないようです...

ありがとうございました。

+1

は 'cut'を見てみましょう。 –

+0

@DavidArenburgのカットはトリックですが、数値ベクトルのために働く、私はデータフレームを持っています...ありがとう – Chrisftw

+1

データフレームはベクトルの単なる(リスト)ベクトルです。 Rでは、事実上すべてがベクトルです。したがって、 'df $ m'もベクトルです。 –

答えて

1

これはあなたの問題です:

> -1 < -2 
[1] FALSE 
> "-1" < "-2" 
[1] TRUE 

あなたは同じ変数内の文字列を数値に置き換えているので、数値が文字列に強制変換されます。したがって、負の数を持つ不等式は誤った結果を返します。

2番目の変数m2を使用して変更を保存し、mをそのまま保持することをお勧めします。

m2 = m 

m2[m >= 0.3] <- "a" 
m2[(m < 0.3 & m >= 0.2)] <- "b" 
m2[(m < 0.2 & m >= 0.1)] <- "c" 
m2[(m < 0.1 & m >= 0.05)] <- "d" 
m2[(m < 0.05 & m >= 0)] <- "e" 
m2[(m < 0 & m >= -0.05)] <- "f" 
m2[(m < -0.05 & m >= -0.1)] <- "g" 
m2[(m < -0.1 & m >= -0.2)] <- "h" 
m2[(m < -0.2 & m >= -0.3)] <- "i" 
m2[m < -0.3] <- "j" 

結果:?

> m2 
    m 
1 i 
2 c 
3 c 
4 g 
5 f 
6 i 
7 i 
8 j 
9 h 
10 j 
11 j 
12 i 
13 h 
14 j 
15 j 
16 j 
17 j 
18 h 
19 i 
20 i 
21 f 
22 j 
23 j 
24 d 
25 i 
26 i 
27 j 
28 e 
29 j 
30 j 
31 h 
32 i 
33 c 
34 g 
35 c 
36 e 
37 j 
38 i 
39 j 
40 j 
+0

ありがとう、あなたの最初の声明については、大いに感謝していませんでした – Chrisftw

関連する問題