Converting Monthly Data to Daily in R

前端 未结 5 1039
慢半拍i
慢半拍i 2021-01-18 08:02

I have a data.frame df that has monthly data:

Date           Value 
2008-01-01      3.5          
2008-02-01      9.5          
2008-03-01      0.1                   


        
5条回答
  •  甜味超标
    2021-01-18 09:03

    An option using tidyr::expand expand a row between 1st day of month to last day of month. The lubridate::floor_date can provide 1st day of month and lubridate::ceiling_date() - days(1) will provide last day of month.

    library(tidyverse)
    library(lubridate)
    
    df %>% mutate(Date = ymd(Date)) %>%
    group_by(Date) %>%
    expand(Date = seq(floor_date(Date, unit = "month"),
           ceiling_date(Date, unit="month")-days(1), by="day"), Value) %>%
    as.data.frame()
    
    #          Date Value
    # 1  2008-01-01   3.5
    # 2  2008-01-02   3.5
    # 3  2008-01-03   3.5
    # 4  2008-01-04   3.5
    # 5  2008-01-05   3.5
    #.....so on
    # 32 2008-02-01   9.5
    # 33 2008-02-02   9.5
    # 34 2008-02-03   9.5
    # 35 2008-02-04   9.5
    # 36 2008-02-05   9.5
    #.....so on
    
    # 85 2008-03-25   0.1
    # 86 2008-03-26   0.1
    # 87 2008-03-27   0.1
    # 88 2008-03-28   0.1
    # 89 2008-03-29   0.1
    # 90 2008-03-30   0.1
    # 91 2008-03-31   0.1
    

    Data:

    df <- read.table(text = 
    "Date           Value 
    2008-01-01      3.5          
    2008-02-01      9.5          
    2008-03-01      0.1",
    header = TRUE, stringsAsFactors = FALSE)
    

提交回复
热议问题