首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中每周向日小时数据的高效简洁向量变换

R中每周向日小时数据的高效简洁向量变换
EN

Stack Overflow用户
提问于 2016-05-23 17:36:49
回答 1查看 48关注 0票数 0

我有一个工作职能,但我希望有一个更简洁的方式来处理这件事。

我有一个事件数据集,这些事件是在每周发生的小时内捕获的。例如,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。

代码语言:javascript
复制
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转换文件/数据”中的完整代码和数据集。

干杯!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-23 18:04:17

您可以使用整数除法%/%来捕获一周中的一天,使用模数%%来捕捉一天中的小时:

代码语言:javascript
复制
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表示。如果您想将它包装成一个函数,可以使用

代码语言:javascript
复制
getTest_hr <- function(weekHours, startTime, stopTime) {
                  weekHours[weekHours %% 24 %in% seq(startTime, stopTime)]
              }

要获得一周中的一天,可以使用整数除法:

代码语言:javascript
复制
# get all indices for the third day of the week
dayOfWeek3 <- weekHours[(weekHours %/% 24 + 1) == 3]

要获得所选时间段的二进制向量,只需从索引中提取逻辑:

代码语言:javascript
复制
allTimesBinary <- (weekHours %% 24) %in% 8:10    
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37397233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档