首页 > 解决方案 > 从年度到月度的爆炸式数据

问题描述

这是一个关于:

从每年到每月的爆炸日期

我试图将数据集稍微更改为:

                 date type     bps
1 2012-06-28 16:00:00    A 2.44376
2 2012-06-28 16:00:00    B 1.73054
3 2012-06-28 16:00:00    C 1.68171
4 2013-06-27 16:00:00    A 2.07297
5 2013-06-27 16:00:00    B 1.77073

以下是数据集定义:

df = structure(list(date = structure(c(1340892000, 1340892000, 1340892000, 
                                       1372341600, 1372341600), class = c("POSIXct", "POSIXt"), tzone = ""), type = 
                      c("A", "B", "C", "A", "B"), bps = 
                      c(2.44376, 1.73054, 1.68171, 2.07297, 1.77073)), .Names = c("date", "type", 
                                                                                  "bps"), class = "data.frame", row.names = c(NA, 5L))

问题是以下代码失败:

df_tbl <- as_tibble(df)

df2_tbl <- df_tbl %>% mutate(date = ceiling_date(date, 'month'),
                             date = map2(date, 
                                         lead(date - 1, default = last(date)), 
                                         seq, by = 'month')) %>% 
  unnest() %>% 
  mutate(date = date - days(1))

出现以下错误:

Error: Problem with `mutate()` input `date`.
x wrong sign in 'by' argument
ℹ Input `date` is `map2(date, lead(date - 1, default = last(date)), seq, by = "month")`.
Run `rlang::last_error()` to see where the error occurred.

似乎原始数据已经包含月度数据,而该数据集是年度数据。

标签: rtidyverselubridate

解决方案


如果您查看第一 2 行,它们具有相同的date内容,因此在相同日期之间创建每月序列是没有意义的。我认为您需要按组应用解决方案,即type

library(tidyverse)
library(lubridate)

df_tbl %>% 
  mutate(date = as.Date(ceiling_date(date, 'month'))) %>%
  group_by(type) %>%
  mutate(date = map2(date, lead(date - 1, default = last(date)),
                     seq, by = 'month')) %>% 
  unnest(date) %>% 
  mutate(date = date - days(1))

#   date       type    bps
#   <date>     <chr> <dbl>
# 1 2012-06-29 A      2.44
# 2 2012-07-29 A      2.44
# 3 2012-08-29 A      2.44
# 4 2012-09-29 A      2.44
# 5 2012-10-29 A      2.44
# 6 2012-11-29 A      2.44
# 7 2012-12-29 A      2.44
# 8 2013-01-29 A      2.44
# 9 2013-03-01 A      2.44
#10 2013-03-29 A      2.44
# … with 17 more rows

推荐阅读