【问题标题】:Fill data gaps with Pad using group returns error使用组返回错误用 Pad 填充数据间隙
【发布时间】:2021-12-12 01:18:09
【问题描述】:

我有在日历年内开始和结束的时间序列数据,并且大多数填充函数(如 pad、padr 包)填充开始日期和结束日期之间的间隙。但是我需要一个完整的年度记录。例如,如果我的数据开始日期是 2016 年 1 月 3 日,则所需的结果是将时间序列延长到年初,或者如果结束日期发生在之前,则延长到年底。 NA 将用于填补空白。

我们赞赏一个适用于多个站点的数据的解决方案,因此下面的示例。

library(dplyr)
library(padr)

#Example datset

site<-"site_1"
date<-seq(as.Date('2016-01-03'),as.Date('2016-12-09'), by='day')
x <- runif(length(date),min=20,max=40)
df1<-data.frame(site,date,x)
df11<-df1[-c(2,3,4,5,6),]

site<-"site_2"
date<-seq(as.Date('2012-06-01'),as.Date('2012-10-25'), by='day')
x <- runif(length(date),min=30,max=40)
df2<-data.frame(site,date,x)
df22<-df2[-c(2,3,4,5,6),]

df<-rbind(df11,df22)

下面的尝试导致错误“开始值大于所有组的结束值”我认为问题在于它没有分组。

dfpad<-df%>%   
pad(group ='site',start_val=floor_date(df[1,2],unit="year"),
 end_val=(round_date(df[length(df$date),2], unit="year")-1))

期望的结果

dfgoal<- data.frame(date=seq(as.Date('2016-01-01'),as.Date('2016-01-10'), by='day'),
                x=c("NA","NA",21,"NA","NA","NA","NA","NA",20,22))
head(dfgoal,10)

【问题讨论】:

    标签: r time-series na pad padr


    【解决方案1】:

    此解决方案使用 for 循环

    原始数据

    library(dplyr)
    library(padr)
    library(lubridate) 
    
    #Example datset
    
    site<-"site_1"
    date<-seq(as.Date('2016-01-03'),as.Date('2016-12-09'), by='day')
    x <- runif(length(date),min=20,max=40)
    df1<-data.frame(site,date,x)
    df11<-df1[-c(2,3,4,5,6),]
    
    site<-"site_2"
    date<-seq(as.Date('2012-06-01'),as.Date('2012-10-25'), by='day')
    x <- runif(length(date),min=30,max=40)
    df2<-data.frame(site,date,x)
    df22<-df2[-c(2,3,4,5,6),]
    
    df<-rbind(df11,df22)
    

    解决方案

    sites_a<-as.vector(unique(df$site))
    
    contiga_df<-data.frame()
    
    for(i in 1:2){
      
      site1a<-subset(df, site==sites_a[i])
      
      siteresult<-site1a%>%
        pad(start_val=floor_date(site1a[1,2],unit="year"), 
            end_val=(round_date(site1a[length(site1a$date),2], unit="year")-1))
      siteresult$site<- replace_na(siteresult$site,sites_a[i])
      contiga_df<-rbind(contiga_df, siteresult)
    }
    

    【讨论】:

      猜你喜欢
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多