我正在使用R的cut函数来“桶”值,并且我得到了关于如何处理等于间隔边界的值的不一致结果。
例如,当进行默认right = TRUE
选择时,存储桶的范围应该包含在右侧。例如,范围(-0.25,-0.20)将包括所有等于-0.20的值,但不包括等于-0.25的值。这似乎并非总是如此,如以下代码和输出:
df = data.frame(First = c(630,615,500,1000),
Second = c(490,492,450,990)) %>%
mutate(Change = Second/First-1)
df %<>% mutate(HistBucket = cut(Change,
seq(-0.3,0,by=0.05)))
df
结果:
First Second Change HistBucket
1 630 490 -0.2222222 (-0.25,-0.2]
2 615 492 -0.2000000 (-0.2,-0.15]
3 500 450 -0.1000000 (-0.15,-0.1]
4 1000 990 -0.0100000 (-0.05,0]
第二条记录的确切值为-0.2,但它落入(-0.2,-0.15)区间而不是所需的(-.25,-0.20)区间。第三条记录具有分块值正好-0.1,所以它也落在一个区间的终点上,但它包含在预期的(-0.15,-0.10)区间内。
这似乎是不一致的行为 - 有没有办法绕过这个并让cut
函数始终如一地处理区间范围的端点上的值?