r - Convert an irregular time series M-D-Y hh:mm:ss to regular TS filling with NA -
i had read previous post cannot obtain want. need obtain serie 16 intervals day (least first , last day, in these cases intervals start/end first/last observation). observed variables located in corresponding inteval , na otherwise.
my data follows: [ya , yb observed variables]
mdyhms ya yb mar-27-2009 19:56:47 25 58.25 mar-27-2009 20:38:59 9 81.25 mar-28-2009 08:00:30 9 88.75 mar-28-2009 09:26:29 0 89.25 mar-28-2009 11:57:01 8.5 74.25 mar-28-2009 12:19:10 7.5 71.00 mar-28-2009 14:17:05 1.5 70.00 mar-28-2009 15:13:14 na na mar-28-2009 17:09:53 4 85.50 mar-28-2009 18:37:24 0 86.00 mar-28-2009 19:19:23 0 50.50 mar-28-2009 20:45:50 0 36.25 mar-29-2009 08:44:16 4.5 34.50 mar-29-2009 10:35:12 8.5 39.50 mar-29-2009 11:09:13 3.67 69.00 mar-29-2009 12:40:07 0 54.25 mar-29-2009 14:31:48 5.33 35.75 mar-29-2009 16:19:27 6.33 71.75 mar-29-2009 16:43:20 7.5 64.75 mar-29-2009 18:37:42 8 83.75 mar-29-2009 20:01:26 6.17 93.75 mar-29-2009 20:43:53 na na mar-30-2009 08:42:05 12.67 88.50 mar-30-2009 09:52:57 4.33 75.50 mar-30-2009 12:01:32 1.83 70.75 mar-30-2009 12:19:40 na na mar-30-2009 14:23:37 3.83 86.75 mar-30-2009 16:00:59 37.33 80.25 mar-30-2009 17:19:28 10.17 77.75 mar-30-2009 17:49:12 9.83 73.00 mar-30-2009 20:06:00 11.17 76.75 mar-30-2009 21:40:35 20.33 68.25 mar-31-2009 08:11:12 18.33 69.75 mar-31-2009 09:51:29 14.5 65.50 mar-31-2009 11:10:41 na na mar-31-2009 13:27:09 na na mar-31-2009 13:44:35 na na mar-31-2009 16:01:23 na na mar-31-2009 16:56:14 na na mar-31-2009 18:27:28 na na mar-31-2009 19:17:46 na na mar-31-2009 21:12:22 na na apr-01-2009 08:35:24 2.33 60.25 apr-01-2009 09:24:49 1.33 71.50 apr-01-2009 11:28:34 5.67 62.00 apr-01-2009 13:31:48 na na apr-01-2009 14:52:18 na na apr-01-2009 15:11:44 1.5 71.50 apr-01-2009 17:00:53 3.17 84.00
thanks!
presuming dataframe called "data", i'd use xts package. they're whole lot easier work :
#conversion of dates data$time <- as.posixct(data$mdyhms,format="%b-%d-%y %h:%m:%s") #conversion time series library(xts) timeseries <- xts(data[,c("ya","yb")],data[,"time"])
then timeseries can used subsequently. can't use normal ts, because don't have regular time series. no way on earth can defend time intervals between observations equal.
edit :
in regard of remarks in comments, can try following :
#calculate period they're #this based on gmt , fact posixct gives number of seconds #passed since origin. 5400 1/16 of 86400 seconds in day data$mdyhms <- as.posixct(data$mdyhms,format="%b-%d-%y %h:%m:%s",tz="gmt") data$period <- as.numeric(data$mdyhms) %/% 5400 * 5400 #make new data frame periods in range of dataframe date <- as.numeric(trunc(data$mdyhms,"day")) ndata <- data.frame( period = seq(min(date),max(date)+86399,by=5400) ) # merge both dataframes , take mean of values within dataframe ndata <- merge(data[c('ya','yb','period')],ndata,by="period",all=t) ndata <- ddply(ndata,"period",mean,na.rm=t) #make time series , rid of nan values #these come averaging vectors na ts <- ts(ndata[c('ya','yb')],frequency=16) ts[is.nan(ts)] <- na
Comments
Post a Comment