В R - подмножество данных с использованием самого длинного непрерывного участка значений, отличных от NA. - PullRequest
0 голосов
/ 05 мая 2020

Я готовлю данные для линейной регрессии и хочу исправить отсутствующие значения (NA), используя самый длинный непрерывный отрезок значений, отличных от NA, в данном году и на данном участке.

Я пробовал na.contiguous (), но мой код не применяет функцию по годам или по сайту

Спасибо за вашу помощь

Тестовые данные представляют собой многомерный временной ряд который охватывает 2 года и 2 сайта. Я надеюсь, что решение будет работать с данными за много лет и 32 сайта, поэтому некоторый уровень автоматизации и qa / q c приветствуются.


    library(dataRetrieval)
    library(dplyr)

    # read in Data, q is  discharge and wt is stream temperature
    wt<-readNWISdv(siteNumbers=c("08181800","07308500"),
    parameterCd=c("00010","00060"), statCd=c("00003"), 
    startDate="1998-07-01", endDate="1999-09-30" )
    dfwt<-wt%>%
      group_by(site_no)%>%
      select(Date,site_no,X_00010_00003,X_00060_00003)%>%
      rename(wt=X_00010_00003,q=X_00060_00003)

    #Subset summer season, add dummy air temp (at).

    dfwt$Date<-ymd(dfwt$Date, tz=Sys.timezone())
    dfwt$month<-month(dfwt$Date)
    dfwt$year<-year(dfwt$Date)
    df<- dfwt %>%
      group_by(site_no)%>%
      subset(month>=7 & month<=9)%>%
      mutate(at=wt*1.3) 
    # add NA
    df[35:38,3]<-NA
    df[155,3]<-NA
    df[194,3]<-NA

    test<-df%>%
      group_by(site_no, year)%>%
      na.contiguous(df) 

1 Ответ

0 голосов
/ 24 июня 2020

Используя a для l oop, я нашел следующее решение:

library(zoo)
library(plyr)
library(lubridate)
zoo(df)

sites<-as.vector(unique(df$site_no))

bfi_allsites<-data.frame()

for(i in 1:2){
  
  site1<-subset(dfz, site_no==sites[i])
  str(site1)
  
  ss1<-split(site1,site1$year)
  site1result<-lapply(ss1,na.contiguous)#works
  site_df <- ldply(site1result,data.frame)
  bfi_allsites<-rbind(bfi_allsites, site_df)
}
head(bfi_allsites)
...