我想对我的数据进行装箱,并考虑使用cut2
包中的Hmisc
。但是,如果我输入的是精确的左端点值,则不会得到所需的范围,而只有端点:
> library(Hmisc)
> paste(cut2(seq(0,9,1),seq(0,10,1)))
[1] " 0" " 1" " 2" " 3" " 4" " 5" " 6" " 7" " 8" "[ 9,10]"
通过将值与实际值略有不同(+1e-10
)来获得预期的结果:
> paste(cut2(seq(0,9,1)+1e-10,seq(0,10,1)))
[1] "[ 0, 1)" "[ 1, 2)" "[ 2, 3)" "[ 3, 4)" "[ 4, 5)" "[ 5, 6)" "[ 6, 7)" "[ 7, 8)" "[ 8, 9)" "[ 9,10]"
我正在使用Hmisc
软件包中相对较新的版本:
> packageVersion("Hmisc")
[1] ‘4.1.1’
我想使用cut2
而不是cut
的原因是cut2
生成的bin的字母顺序对应于bin的数字顺序:
> sort(paste(cut2(seq(0,19,2)+1e-10,seq(0,20,2))))
[1] "[ 0, 2)" "[ 2, 4)" "[ 4, 6)" "[ 6, 8)" "[ 8,10)" "[10,12)" "[12,14)" "[14,16)" "[16,18)" "[18,20]"
> sort(paste(cut(seq(0,19,2),seq(0,20,2),include.lowest = TRUE)))
[1] "(10,12]" "(12,14]" "(14,16]" "(16,18]" "(2,4]" "(4,6]" "(6,8]" "(8,10]" "[0,2]" "[0,2]"
cut2
的这种端点行为是错误还是我错过了什么?