【问题标题】:Mutate each day and each hour using tidyverse functions in R使用 R 中的 tidyverse 函数每天和每小时进行变异
【发布时间】:2019-05-30 12:35:08
【问题描述】:

目前,我有代码使用以下方法返回每天发生的事件的 tibble:

online_toy_purchases %>%
mutate(interval = lubridate::date(date)) %>%
group_by(interval) %>%
summarise(count = n())

这当前返回以下内容:

# A tibble: 31 x 2
interval    count
2018-12-01    500
2018-12-02    300
2018-12-03    400
2018-12-04    200
2018-12-05    600
...
2018-12-31    100

我希望我的代码按每小时和每天进行分组,以获得更精细的数据视图,这将返回以下内容:

# A tibble: 744  x 2
interval             count
2018-12-01 01:00:00    50    
2018-12-01 02:00:00    60  
2018-12-01 03:00:00    20  
2018-12-01 04:00:00    80  
...
2018-12-31 24:00:00    10 

online_toy_purchases 是一个 tibble,其中包含交易的 ID 和包含购买日期和小时、分钟和秒的时间戳(即 ->“2018-12 -01 01:20:58")

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
  • 如果你刚刚做了group_by(interval, lubridate::hour(date))呢?无法测试,因为没有可重现的示例。
  • 这会返回一个带有间隔的小标题,'lubridate::hour(date)',计为特征,中间特征显示小时。这真的很接近我想要的,但不适合绘图。努力为这篇文章获取一些可重复的数据。

标签: r datetime time-series tidyverse tidyr


【解决方案1】:

这将计算数据每小时内的行数。

library(tidyverse)
online_toy_purchases %>%
  # assuming that "date" is formatted as a datetime variable already
  count(time = lubridate::floor_date(date, "1 hour")) %>%

  # additional step using padr::pad to add missing hours and
  #   tidyr::replace_na to make NAs into zeroes
  padr::pad() %>%
  replace_na(list(n=0))

为了进行可视化和进一步分析,让行记录没有数据的时段会很有帮助。您也可以通过转换为 tsibble 来完成类似的操作。

【讨论】:

  • 谢谢!这让我非常接近。我将如何使用 padr 或 tsibble 为未提及的时间返回“0”值?这些存在于该数据中。
猜你喜欢
  • 2019-11-08
  • 1970-01-01
  • 2021-06-13
  • 2016-02-27
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
相关资源
最近更新 更多