R 将时间数据组织为固定的时间间隔

R 将时间数据组织为固定的时间间隔,r,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")]) struc

我正在处理一个大型数据集,其中包含完整的日期和时间,格式为“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是结束时间

为此,只有开始时间才重要。 解决这个问题的最好办法是什么


我试着用if。。。其他语句,但无法真正开始工作。

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

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

您可能需要调整要剪切的参数,以确保四分之一边界如您所愿

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

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
非常类似的问题:在剪切中添加一个labels参数,您就会在那里-