[R] foreloop? aggregating time series data into groups
David Winsemius
dwinsemius at comcast.net
Mon Nov 1 21:32:31 CET 2010
On Nov 1, 2010, at 3:34 PM, blurg wrote:
>
> I have a data set similar to the set below where 1 and 2 indicate test
> results and 0 indicates time points in between where there are no test
> results. I would like to allocate the time points leading up to a
> test
> result with the value of the test result.
>
> What I have: What I want:
> 1 1
> 0 1
> 0 1
> 0 1
> 1 1
> 0 2
> 0 2
> 2 2
> 0 1
> 0 1
> 1 1
> 0 2
> 2 2
>
> I have attempted methods creating a data.frame of the the breaks/
> changes in
> of values to from 0 to 1 or to 2.
> x<-c(0,2,0,1,0,0,0,0,1,0,1,0,0,0,2,1,0,0,0,2,0,0,0,1)
> x1 <- which(diff(x) == 1)
> x2 <- which(diff(x) == 2)
Not sure how long you longest run of zeros is but repeate applications
of htis method n-such times will fill in in the backward direction:
> xna <- x
> xna[xna==0] <- NA
> xna[which(is.na(xna))] <- xna[which(is.na(xna))+1]
> xna
[1] 2 2 1 1 NA NA NA 1 1 1 1 NA NA 2 2 1 NA NA 2 2 NA
NA 1 1
> xna[which(is.na(xna))] <- xna[which(is.na(xna))+1]
> xna
[1] 2 2 1 1 NA NA 1 1 1 1 1 NA 2 2 2 1 NA 2 2 2 NA
1 1 1
> xna[which(is.na(xna))] <- xna[which(is.na(xna))+1]
> xna[which(is.na(xna))] <- xna[which(is.na(xna))+1]
> xna[which(is.na(xna))] <- xna[which(is.na(xna))+1]
> xna
[1] 2 2 1 1 1 1 1 1 1 1 1 2 2 2 2 1 2 2 2 2 1 1 1 1
I'm not sure that conversion to NA is needed. The indexing with
which(x==0) and which(x==0+1 might work as well. Yep... that work's too:
> x
[1] 0 2 0 1 0 0 0 0 1 0 1 0 0 0 2 1 0 0 0 2 0 0 0 1
> x[which(x==0)] <- x[which(x==0)+1]
> x
[1] 2 2 1 1 0 0 0 1 1 1 1 0 0 2 2 1 0 0 2 2 0 0 1 1
> x[which(x==0)] <- x[which(x==0)+1]
> x[which(x==0)] <- x[which(x==0)+1]
> x[which(x==0)] <- x[which(x==0)+1]
> x
[1] 2 2 1 1 1 1 1 1 1 1 1 2 2 2 2 1 2 2 2 2 1 1 1 1
--
David
>
> What ever the solution, I can't be entered by hand due to the size
> of the
> dataset (>10 million and change). Any ideas? This is my first time
> posting
> to this forum and I am relatively new to R, so please don't flame me
> to
> hard. Desperate times call for desperate measures. Thanks.
> --
David Winsemius, MD
West Hartford, CT
More information about the R-help
mailing list