down vote favorite Hello I have a zoo series. It lasts 10 years and its frequency is 15min. I'd like to get a new zoo series (or vector) with the same number of elements, whith each element equal to the first element of the day. That's, The first element everyday is repeated throughout the wole day. This is not same as aggregate(originalseries,as.Date,head,1) because this gives a vector with just one element for each day. cheers -- View this message in context: http://r.789695.n4.nabble.com/Repeat-the-first-day-data-through-all-the-day-Zoo-tp2338069p2338069.html Sent from the R help mailing list archive at Nabble.com.
Gabor Grothendieck
2010-Aug-25 11:56 UTC
[R] Repeat the first day data through all the day. Zoo
On Wed, Aug 25, 2010 at 7:43 AM, skan <juanpide at gmail.com> wrote:> I have a zoo series. It lasts 10 years and its frequency is 15min. > > I'd like to get a new zoo series (or vector) with the same number of > elements, whith each element equal to the first element of the day. That's, > The first element everyday is repeated throughout the wole day. > > This is not same as aggregate(originalseries,as.Date,head,1) because this > gives a vector with just one element for each day.Try ave:> library(zoo) > library(chron) > zz <- z <- zoo(1:100, chron(0:9/5)) > zz[] <- ave(coredata(z), as.Date(time(z)), FUN = function(x) head(x, 1)) > cbind(z, zz)z zz (01/01/70 00:00:00) 1 1 (01/01/70 04:48:00) 2 1 (01/01/70 09:36:00) 3 1 (01/01/70 14:24:00) 4 1 (01/01/70 19:12:00) 5 1 (01/02/70 00:00:00) 6 6 (01/02/70 04:48:00) 7 6 (01/02/70 09:36:00) 8 6 (01/02/70 14:24:00) 9 6 (01/02/70 19:12:00) 10 6
Gabor Grothendieck
2010-Aug-25 12:39 UTC
[R] Repeat the first day data through all the day. Zoo
On Wed, Aug 25, 2010 at 7:43 AM, skan <juanpide at gmail.com> wrote:> > ?down vote ?favorite > > > Hello > > I have a zoo series. It lasts 10 years and its frequency is 15min. > > I'd like to get a new zoo series (or vector) with the same number of > elements, whith each element equal to the first element of the day. That's, > The first element everyday is repeated throughout the wole day. > > This is not same as aggregate(originalseries,as.Date,head,1) because this > gives a vector with just one element for each day. > > cheers >Here are a few more solutions too: library(zoo) library(chron) z <- zoo(1:10, chron(0:9/5)) # aggregate / na.locf z.ag <- aggregate(z, as.Date, head, 1) na.locf(z.ag, xout = time(z)) # duplicated / na.locf z.na <- ifelse.zoo(!duplicated(as.Date(time(z))), z, NA) na.locf(z.na) # ave - as before zz <- z zz[] <- ave(coredata(z), as.Date(time(z)), FUN = function(x) head(x, 1)) zz