2016-04-08 6 views
0

私は、次のような構造で時系列データを持っている:日は、時系列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) 

私が考えることができる最も近い日、年

melt(dat,id.vars=c("Day","Year")) 
によってデータを溶融することです

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),] 

日に強制変換

は、このいずれかを行うための、より効率的かつ非愚かな方法はありますか?

答えて

0

私はを使用してハドレーアプローチを取ったがは、dplyrからstringrからstr_cを変異させ、そしてlubridateからas_date、tidyrからを収集します。物事はかなりスムーズに流れます。

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))