2016-04-08 3 views
0

Ich habe Zeitreihendaten in der folgenden Struktur:Tage in Reihen und Monaten in den Spalten Schmelze in Zeitreihen R

dat=data.frame("Year"=rep(2005,31), 
       "Day"=seq(1:31), 
       "JANUARY"=sample(seq(1:100),31,T), 
       "FEBRUARY"=c(sample(seq(1:100),28),NA,NA,NA), 
       "MARCH"=sample(seq(1:100),31), 
       "APRIL"=c(sample(seq(1:100),30),NA), 
       "MAY"=sample(seq(1:100),31), 
       "JUNE"=c(sample(seq(1:100),30),NA), 
       "JULY"=sample(seq(1:100),31), 
       "AUGUST"=sample(seq(1:100),31), 
       "SEPTEMBER"=c(sample(seq(1:100),30),NA), 
       "OCTOBER"=sample(seq(1:100),31), 
       "NOVEMBER"=c(sample(seq(1:100),30),NA), 
       "DECEMBER"=sample(seq(1:100),31) 

Closest ich denken kann, ist, die Daten für Tag und Jahr

melt(dat,id.vars=c("Day","Year")) 
zu schmelzen

Nötigung zu einem Datum

dat$Date<-paste(dat$Day,dat$variable,dat$Year,sep="-") 
dat$Date<-as.Date(dat$Date,"%d-%B-%Y") 
dat<-dat[which(is.na(pm25$Date)!=T),] 

gibt es eine effizientere und nicht dumme Weise irgendetwas davon zu tun?

Antwort

0

nahm ich den Hadley Ansatz sammeln von tidyr, mutieren von dplyr Verwendung str_c von stringr und as_date von lubridate. Es lässt die Dinge ziemlich flüssig fließen.

library('dplyr') 
library('tidyr') 
library('stringr') 
library('lubridate') 

Dates <- dat %>% 
    gather(Month, Value, JANUARY:DECEMBER) %>% 
    mutate(Date_1 = str_c(Day, Month, Year, sep = "-"), 
     Date_2 = as_date(Date_1, "%d-%B-%Y")) %>% 
    filter(!is.na(Date_2))