将时间数据组织成固定的时间间隔

时间:2018-06-21 05:23:41

标签: r

我正在使用日期和时间完整的大型数据集,格式为“ 2018-04-06 14:39:00”。我正在尝试在数据框中创建一个新列,该列将每个时间戳记的各个时间间隔分成一天的四分之一,例如:

"00:00 - 05:59"
"06:00 - 11:59"
"12:00 - 17:59"
"18:00 - 23:59"

例如,时间戳为“ 5:00”的时间间隔为“ 00:00-05:59”,位于数据帧中该时间戳相同行的另一列中。

> dput(file1[, c("V8", "V9")])

structure(list(V8 = structure(1:19, .Label = c("4/6/2018 14:39", 
"4/6/2018 15:04", "4/6/2018 15:09", "4/6/2018 15:28", "4/6/2018 15:56", 
"4/6/2018 16:02", "4/6/2018 16:07", "4/6/2018 16:10", "4/6/2018 16:11", 
"4/6/2018 16:27", "4/6/2018 16:41", "4/6/2018 16:43", "4/6/2018 16:57", 
"4/6/2018 17:13", "4/6/2018 17:17", "4/6/2018 17:30", "4/6/2018 17:38", 
"4/6/2018 17:47", "4/6/2018 17:52"), class = "factor"), V9 = structure(c(1L, 
3L, 2L, 4L, 8L, 5L, 6L, 9L, 7L, 12L, 19L, 16L, 11L, 13L, 10L, 
14L, 17L, 18L, 15L), .Label = c("4/6/2018 15:00", "4/6/2018 15:26", 
"4/6/2018 15:32", "4/6/2018 16:01", "4/6/2018 16:10", "4/6/2018 16:12", 
"4/6/2018 16:18", "4/6/2018 16:35", "4/6/2018 16:46", "4/6/2018 17:24", 
"4/6/2018 17:37", "4/6/2018 17:38", "4/6/2018 17:46", "4/6/2018 18:24", 
"4/6/2018 18:46", "4/6/2018 19:21", "4/6/2018 20:14", "4/6/2018 20:35", 
"4/6/2018 21:44"), class = "factor")), .Names = c("V8", "V9"), class = 
"data.frame", row.names = c(NA, -19L))

V8是开始时间,V9是结束时间

为此,仅开始时间(V8)很重要。 解决此问题的最佳方法是什么?

我尝试使用if (...) else语句,但实际上无法正常工作。

1 个答案:

答案 0 :(得分:1)

尝试以下方法。我假设您的日期是年/月/年,并且已经调用了数据框df1

您的示例开始时间不是很有趣(它们都属于同一季度),因此我使用结束时间(V9)进行说明。

您可能需要调整cut的参数,以确保四分之一边界符合您的要求。

示例中所有行的日期都相同,但是如果不是,则需要按日期分组。

library(dplyr)
library(lubridate)

df1 %>% 
  transmute(date_time = dmy_hm(V9), 
            Date = as_date(date_time)) %>% 
  group_by(Date) %>% 
  mutate(quarter = cut(hour(date_time), 
                       breaks = seq(0, 24, 6), 
                       include.lowest = TRUE, 
                       labels = c("00:00 - 05:59", 
                                  "06:00 - 11:59", 
                                  "12:00 - 17:59", 
                                  "18:00 - 23:59"))) %>%
  ungroup()

   date_time           Date       quarter      
   <dttm>              <date>     <fct>        
 1 2018-06-04 15:00:00 2018-06-04 12:00 - 17:59
 2 2018-06-04 15:32:00 2018-06-04 12:00 - 17:59
 3 2018-06-04 15:26:00 2018-06-04 12:00 - 17:59
 4 2018-06-04 16:01:00 2018-06-04 12:00 - 17:59
 5 2018-06-04 16:35:00 2018-06-04 12:00 - 17:59
 6 2018-06-04 16:10:00 2018-06-04 12:00 - 17:59
 7 2018-06-04 16:12:00 2018-06-04 12:00 - 17:59
 8 2018-06-04 16:46:00 2018-06-04 12:00 - 17:59
 9 2018-06-04 16:18:00 2018-06-04 12:00 - 17:59
10 2018-06-04 17:38:00 2018-06-04 12:00 - 17:59
11 2018-06-04 21:44:00 2018-06-04 18:00 - 23:59
12 2018-06-04 19:21:00 2018-06-04 18:00 - 23:59
13 2018-06-04 17:37:00 2018-06-04 12:00 - 17:59
14 2018-06-04 17:46:00 2018-06-04 12:00 - 17:59
15 2018-06-04 17:24:00 2018-06-04 12:00 - 17:59
16 2018-06-04 18:24:00 2018-06-04 12:00 - 17:59
17 2018-06-04 20:14:00 2018-06-04 18:00 - 23:59
18 2018-06-04 20:35:00 2018-06-04 18:00 - 23:59
19 2018-06-04 18:46:00 2018-06-04 12:00 - 17:59