在给定开始时间和结束时间的情况下,我试图为每个数据行创建时间间隔。例如,给定开始/结束时间,我想创建另一列[右列]中称为“时间范围”的时间范围。目标是将一天分成(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进行更快的计算会更好;但是,我在剥离开始时间和结束时间以创建时间范围时遇到了麻烦。为此,仅开始时间很重要。谢谢
答案 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