我正在使用日期和时间完整的大型数据集,格式为“ 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
语句,但实际上无法正常工作。
答案 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