我的数据框架包含125000 行的格式YYYY-MM-DD HH-MM-SS
中的日期值,分钟分解(每行代表一分钟(。
1 2018-01-01 00:04:00
2 2018-01-01 00:05:00
3 2018-01-01 00:06:00
4 2018-01-01 00:07:00
5 2018-01-01 00:08:00
6 2018-01-01 00:09:00
...
124998 2018-03-29 05:07:00
124999 2018-03-29 05:08:00
125000 2018-03-29 05:09:00
我想通过在任何给定的小时内提取所有分钟值并将结果保存到单个数据帧中来征服数据。
我已经使用了与grepl()
合并的subset()
无济于事。我尝试设置start =
和stop =
参数,但也无济于事。
我要做的是每个HH
值,我想提取所有行带有相应的HH
值,然后为每个相应的HH
值创建一个新的数据框架。
例如,我想拥有一个与每个分钟值(整个小时的数据价值(相对应的数据框架,从而导致数据框架,例如:
-
2018-01-01 00:00:00
(包含从2018-01-01 00:00:00
到2018-01-01 00:59:00
(包含((
的数据 -
2018-01-01 01:00:00
(包含从2018-01-01 01:00:00
到2018-01-01 01:59:00
(包含((
的数据
等等。
是否有一种快速的方法来实现这一目标?
是一项更费力的任务?注意:我知道我所需的结果会产生很多数据框架,这对我的特定项目很好,因为我只能在任何时候都在一个一个小时的街区上工作。<<<<<<<<<<<</strong>
这将产生每个小时分组的数据帧列表,假设您的数据帧称为data
,并且您的第一列是V1
split(data, format(data$V1, "%Y-%m-%d %H"))
我提出了一个解决方案,该解决方案每分钟提取( MM
(值/行从主数据框架:
df <- buckets[grepl("00:\d+:00$", buckets$time), ]
要使它每小时分开,我将根据我要专注的小时更改第一个00
,然后我可以执行类似的函数来提取每个日期值。
如果要访问每个单独的日期值,则lubridate
具有默认函数。
library(lubridate)
data %>% mutate(year = year(x), month = month(x), day = day(x), hour = hour(x))
因此,您可以通过:
获得相同的分裂(但以更麻烦的方式(data %>% mutate(year = year(x), month = month(x), day = day(x), hour = hour(x)) %>%
group_by(year, month, day, hour) %>%
split(list(.$year, .$month, .$day, .$hour))
虚拟数据
x <- seq(as.POSIXct("2018-01-01 00:00:00"), as.POSIXct("2018-01-04 59:59:59"), length.out = 1000)
data <- data.frame(x)