我有一个工作职能,但我希望有一个更简洁的方式来处理这件事。
我有一个事件数据集,这些事件是在每周发生的小时内捕获的。例如,Sunday= 4上的凌晨4点,周一= 28点的凌晨4点,我想每天分析一下这些数据。例如,任何一天上午8点到10点之间发生的所有事件。
为此,我构建了一个函数,它为有序列表的给定范围返回一个二分法值。函数two_break接受0:168之间的有序整数列表,表示一周的小时数和所需24小时时间的范围(b1和b2)。b1和b2划分了所需的24小时一天的范围。也就是说,如果b1=8和b2=10 two_break将返回9的所有值,则(9+24)=33,(9+48)=57...etc。作为1和所有其他的0。
two_break <- function(test_hr,b1,b2){
test_hr<-ifelse(test_hr==1,1.1,test_hr)
for(i in 0:6){
test_hr<-ifelse(test_hr> (b1+24*i) & test_hr< (b2+24*i), 1 ,test_hr)
}
test_hr<-ifelse(test_hr==1,1,0)
return(test_hr)
}这个函数工作得很好,但我想知道是否有人能更有效地/简洁地完成它。
请参阅“我的github:anthonyjp87 168 hr转换文件/数据”中的完整代码和数据集。
干杯!
发布于 2016-05-23 18:04:17
您可以使用整数除法%/%来捕获一周中的一天,使用模数%%来捕捉一天中的小时:
weekHours <- 1:168
# return the indices of all elements where the hour is between 8AM and 10AM, inclusive
test_hr <- weekHours[weekHours %% 24 %in% 8:10]请注意,午夜由0表示。如果您想将它包装成一个函数,可以使用
getTest_hr <- function(weekHours, startTime, stopTime) {
weekHours[weekHours %% 24 %in% seq(startTime, stopTime)]
}要获得一周中的一天,可以使用整数除法:
# get all indices for the third day of the week
dayOfWeek3 <- weekHours[(weekHours %/% 24 + 1) == 3]要获得所选时间段的二进制向量,只需从索引中提取逻辑:
allTimesBinary <- (weekHours %% 24) %in% 8:10 https://stackoverflow.com/questions/37397233
复制相似问题