2014-02-20 43 views
0

我已经写了一个函数,它接受一小时一天的向量,即0到23之间的数字,并将每个小时放置到8个连续的桶之一中。例如,小时0,1和2放入存储桶1中,小时21,22和23存储在存储桶8中。存储桶作为矢量返回。向量化的ifelse语句用于分程化

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))))))) 
} 

回答

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 
+0

感谢。我应该想到这一点。实际上我早些时候尝试过几小时%%。 – stackoverflowuser2010

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