【问题标题】:How to create and populate dummy rows in tidyverse?如何在 tidyverse 中创建和填充虚拟行?
【发布时间】:2023-01-27 18:40:44
【问题描述】:

我正在处理一些月度数据,我想通过创建和填充一些虚拟行将其转换为每日数据,正如问题所暗示的那样。

例如,假设我有以下数据:

date       index
2013-04-30  232
2013-05-31  232
2013-06-30  233

有没有一种“简单”的方法,最好是通过tidyverse,假设我在整个月内保持索引不变,我可以将上述数据转换为每日数据?例如,我想为四月创建另外 29 行,范围从 2013-04-012013-04-29,该月最后一天的索引为四月的 232。其余月份也应如此(我的数据不仅仅是那三个月)。

任何直观的建议将不胜感激:)

【问题讨论】:

    标签: r dplyr tidyverse data-cleaning


    【解决方案1】:

    使用 tidyr 中的 completefill 你可以这样做:

    dat <- structure(list(
      date = structure(c(15825, 15856, 15886), class = "Date"),
      index = c(232L, 232L, 233L)
    ), class = "data.frame", row.names = c(
      NA,
      -3L
    ))
    
    library(tidyr)
    
    dat |> 
      complete(date = seq(as.Date("2013-04-01"), as.Date("2013-06-30"), "day")) |> 
      fill(index, .direction = "up")
    #> # A tibble: 91 × 2
    #>    date       index
    #>    <date>     <int>
    #>  1 2013-04-01   232
    #>  2 2013-04-02   232
    #>  3 2013-04-03   232
    #>  4 2013-04-04   232
    #>  5 2013-04-05   232
    #>  6 2013-04-06   232
    #>  7 2013-04-07   232
    #>  8 2013-04-08   232
    #>  9 2013-04-09   232
    #> 10 2013-04-10   232
    #> # … with 81 more rows
    

    【讨论】:

      【解决方案2】:

      你可以在complete中使用full_seq

      library(tidyr)
      df |>
        complete(date = full_seq(date, 1)) |>
        fill(index)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-10
        • 2017-10-08
        • 2018-05-20
        • 2019-11-09
        • 2020-12-08
        • 2021-01-09
        相关资源
        最近更新 更多