R中用于data.tables的cut函数的替代方案 - 将整数变量转换为因子

4

我希望将整数变量hp转换为分类变量,按照10进行分割。

mtcars[, hp_cat := cut(hp, 
    breaks = c(0, 10, 20, 30 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, Inf), 
include.lowest = TRUE )]

这样可以得到期望的结果,但是写出所有数字很繁琐。有更快的方式吗?同时最好的替代方法也会导致更好的因子名称。

注意:我希望在data.table中获得结果...所以不要使用dplyr。


1
hp 按照区间 [0, 160],每隔 10 切分。 - Matt
有没有可能创建一个类别,将所有超过160的内容都归入其中? - Nneka
1
是的,在末尾使用Inf,看下面我所做的。 - MatthewR
能否将函数seq的限制从例如(0,10]更改为[0,10)? - Nneka
2个回答

4

只需使用序列函数。根据情况,您可能需要在向量中作为第一个元素使用-Inf。此外,label参数将允许您分配名称,这在下面的代码中起作用:labels = paste0("Group",2:length(BRKS))

BRKS <-    c( seq( 0 , 160, 10 ) , Inf )

mtcars[, hp_cat := cut(hp, breaks = BRKS , include.lowest = TRUE )]

0

另一个应该更快的选项:

mtcars[, hp_cat2 := ceiling(hp/10)*10][hp_cat2 > 160, hp_cat2 := Inf]

使用正确的极限作为您的更好的因子名称的命名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接