负不等式提取 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
我想用字符串替换数值。数值范围在 -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