Extract/subset 每小时的分钟值
Extract/subset minute values from each hour
我的数据框包含 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
我想通过提取任何给定小时内的所有分钟值并将结果保存到单独的数据框中来对数据进行子集化。
我已经将 subset()
与 grepl()
结合使用,但无济于事。我试过设置 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
(含)的数据)
等等。
是否有快速的方法来实现这一目标,还是一项更费力的任务?
注意:我知道我想要的结果会产生很多数据帧,这对我的特定项目来说很好,因为我只会处理一个一小时的块一次。
我想出了一个解决方案,它每分钟(MM
)value/row 从主数据框中提取:
df <- buckets[grepl("00:\d+:00$", buckets$time), ]
为了将它按小时分开,我将根据我想关注的时间简单地更改第一个 00
,然后我可以执行类似的功能来提取每个单独的日期值。
假设您的数据框名为 data
且第一列为 V1
,这将生成按小时分组的数据框列表
split(data, format(data$V1, "%Y-%m-%d %H"))
如果您想访问每个单独的日期值,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)
我的数据框包含 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
我想通过提取任何给定小时内的所有分钟值并将结果保存到单独的数据框中来对数据进行子集化。
我已经将 subset()
与 grepl()
结合使用,但无济于事。我试过设置 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
(含)的数据)
等等。
是否有快速的方法来实现这一目标,还是一项更费力的任务?
注意:我知道我想要的结果会产生很多数据帧,这对我的特定项目来说很好,因为我只会处理一个一小时的块一次。
我想出了一个解决方案,它每分钟(MM
)value/row 从主数据框中提取:
df <- buckets[grepl("00:\d+:00$", buckets$time), ]
为了将它按小时分开,我将根据我想关注的时间简单地更改第一个 00
,然后我可以执行类似的功能来提取每个单独的日期值。
假设您的数据框名为 data
且第一列为 V1
split(data, format(data$V1, "%Y-%m-%d %H"))
如果您想访问每个单独的日期值,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)