查找给定开始和结束时间的设置范围/间隔(data.table包)

时间:2018-06-29 07:27:26

标签: r

在给定开始时间和结束时间的情况下,我试图为每个数据行创建时间间隔。例如,给定开始/结束时间,我想创建另一列[右列]中称为“时间范围”的时间范围。目标是将一天分成(0-6:00,6-12:00,12-18:00,18-24:00)的四分之一。

Person        Start Time            End Time            Time range
A             4/22/2018 8:58        4/22/2018 9:07      6:00-11:59 
B             4/19/2018 6:14        4/19/2018 6:20      6:00-11:59
C             4/18/2018 21:41       4/18/2018 22:03     18:00-23:59            

我正在使用"data.table" package,并使用file1 <- fread("Data.csv",sep = ",")上传csv文件,因为该文件可能非常大,并且听说使用data.table进行更快的计算会更好;但是,我在剥离开始时间和结束时间以创建时间范围时遇到了麻烦。为此,仅开始时间很重要。谢谢

2 个答案:

答案 0 :(得分:0)

我建议您使用data.table导入csv,然后使用软件包lubridate进行日期/时间操作。也许您还应该声明您的列中的日期变量为yourdf$Start_Time<-as.Date(x,...)。 如果您仍然有问题,请告诉我如何帮助您。

答案 1 :(得分:0)

我不知道您的日期格式,因此我将其创建为POSIXct。这是基本的R解决方案,而不是data.table

# sample data
df <- data.frame(Person = LETTERS[1:5], 
            start_time = as.POSIXct(c("4/22/2018 8:58", "4/19/2018 6:14", 
                         "4/18/2018 21:41", '5/17/2018 00:00', '7/17/2018 17:59'), 
                                    format = '%m/%d/%Y %H:%M'))

# extract hour from start_time and identify corresponding interval by dividing by 6
interval_id <- as.numeric(format(df$start_time, "%H")) %/% 6

# prepare and add time ranges
df$range <- c("00:00-05:59", "06:00-11:59", '12:00-17:59', '18:00-23-59')[interval_id+1]

#  Person          start_time       range
#1      A 2018-04-22 08:58:00 06:00-11:59
#2      B 2018-04-19 06:14:00 06:00-11:59
#3      C 2018-04-18 21:41:00 18:00-23-59
#4      D 2018-05-17 00:00:00 00:00-05:59
#5      E 2018-07-17 17:59:00 12:00-17:59