负不等式提取 returns 个错误值

extraction with negative inequalities returns wrong values

我想用字符串替换数值。数值范围在 -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 < -2
[1] FALSE
> "-1" < "-2"
[1] TRUE

由于您在同一个变量中用字符串替换数字,因此数字将被强制转换为字符串。因此,负数的不等式会 return 错误的结果。

我建议使用第二个变量 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