【问题标题】:Extract/subset minute values from each hour从每小时中提取/子集分钟值
【发布时间】:2018-09-15 02:19:36
【问题描述】:

我的数据框包含超过 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:002018-01-01 00:59:00(含)的数据)
  • 2018-01-01 01:00:00(包含从2018-01-01 01:00:002018-01-01 01:59:00(含)的数据)

等等。

有没有一种快速的方法来实现这一点,还是一项更费力的任务?

注意:我知道我想要的结果会产生很多数据帧,这对我的特定项目来说很好,因为我在任何时候都只会处理一个一小时的块。

【问题讨论】:

    标签: r subset grepl


    【解决方案1】:

    这将生成一个按小时分组的数据框列表,假设您的数据框名为 data 并且您的第一列是 V1

    split(data, format(data$V1, "%Y-%m-%d %H"))
    

    【讨论】:

      【解决方案2】:

      我想出了一个从主数据框中提取每分钟 (MM) 值/行的解决方案:

      df <- buckets[grepl("00:\\d+:00$", buckets$time), ]
      

      为了将每个小时分开,我将根据我想要关注的时间更改第一个 00,然后我可以执行类似的功能来提取每个单独的日期值。

      【讨论】:

        【解决方案3】:

        如果您想访问每个单独的日期值,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)
        

        【讨论】:

          猜你喜欢
          • 2023-03-21
          • 1970-01-01
          • 2019-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多