用于bucketization的矢量化ifelse语句

时间:2014-02-20 07:36:20

标签: r

我编写了一个函数,它接受一个小时的向量,即0到23之间的数字,并将每小时放入8个连续桶中的一个。例如,小时0,1和2放在桶1中,小时21,22和23放在桶8中。桶作为向量返回。

ifelse结构非常复杂,将来我可能会增加或减少每个桶的大小。有人可以建议替代方案吗?

getBucket <- function(hour)
{
    ifelse (hour < 3, 1, ifelse (hour < 6, 2, ifelse (hour < 9, 3, ifelse (hour < 12, 4, ifelse (hour < 15, 5, ifelse (hour < 18, 6, ifelse (hour < 21, 7, 8)))))))
}

2 个答案:

答案 0 :(得分:3)

整数除法很简单:

hours <- 0:23

hours %/% 3 + 1
# [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8

答案 1 :(得分:2)

 hours <- c(23,11,2,5, 0)
 findInterval(hours, seq(0, 23, by=3) )
 [1] 8 4 1 2 1