为数值分配指定区间:R语言data.table代码报错求助
解决R中区间分类的代码报错问题
嘿,我一眼就看出问题所在啦!你遇到的报错是因为R不支持1000 < value < 5001这种连续比较的写法——这种语法在Python里没问题,但R会把它解析成(1000 < value) < 5001,这既不符合你的逻辑需求,还会导致语法解析错误。
下面给你两种解决方案:
方案一:修正嵌套ifelse的逻辑写法
把连续比较拆成用逻辑与&连接的两个条件,同时注意边界值的处理(比如1000刚好落在0-1000区间,5000落在1001-5000区间等),修正后的代码如下:
dt[, Range := ifelse(value <= 1000, "0-1000", ifelse(value > 1000 & value <= 5000, "1001-5000", ifelse(value > 5000 & value <= 10000, "5001-10000", "10001-20000")))]
方案二:用cut()函数更优雅地处理区间分类
嵌套ifelse在区间多的时候会变得臃肿难维护,R的cut()函数专门用来处理这种数值到区间的分类,代码更简洁可读性更强:
dt[, Range := cut(value, breaks = c(0, 1000, 5000, 10000, 20000), labels = c("0-1000", "1001-5000", "5001-10000", "10001-20000"), include.lowest = TRUE)]
breaks参数定义区间的分割点labels对应每个区间的显示文本include.lowest = TRUE确保最小值(1000)被包含在第一个区间里
你可以测试一下这两种写法,都能完美匹配你想要的区间分配需求~
内容的提问来源于stack exchange,提问作者Peter Chen
相关产品推荐
相关产品推荐

