[R] Resampling physiological data using R?

Gabor Grothendieck ggrothendieck at gmail.com
Fri Dec 12 02:41:35 CET 2008


Here some sample code to interpolate your data using zoo:
by5 is a sequence for every 5 time units which we merge
with z, the original data.  Then we use na.approx to replace
all NAs with linear interpolations.

Lines <- "Time    CursorX CursorY Pupilsize
1811543 -1      -1      -1
1811563 -1      -1      -1
1811584 511     370     4.175665
1811603 511     368     4.181973
1811624 521     368     4.210732
1811644 512     377     4.149632
1811664 524     377     4.275845
1811684 518     368     4.236212
1811703 516     370     4.238384
1811725 507     364     4.181157
1811744 509     371     4.185016
1811764 509     377     4.231987
1811784 514     387     4.252449
1811802 515     388     4.273726"

library(zoo)
z <- read.zoo(textConnection(Lines), header = TRUE)

by5 <- seq(5 * floor(start(z)/5), ceiling(5 * ceiling(end(z)/5)), 5)
zz <- merge(z, zoo(, as.integer(by5)))
zza <- na.approx(zz)


On Thu, Dec 11, 2008 at 3:38 PM, tsunhin wong <thjwong at gmail.com> wrote:
> Dear all R users,
>
> I am going to use R to process some of my physiological data about eye.
>
> The problem is the recording machine does not sample in a reliably
> constant rate: the time intervals between data sampled can vary from
> 9msec to ~120msec, while most around in the 15-30msec range.
> The below is a fraction of a single data file of a trial:
>
> Time    CursorX CursorY Pupilsize
> 1811543 -1      -1      -1
> 1811563 -1      -1      -1
> 1811584 511     370     4.175665
> 1811603 511     368     4.181973
> 1811624 521     368     4.210732
> 1811644 512     377     4.149632
> 1811664 524     377     4.275845
> 1811684 518     368     4.236212
> 1811703 516     370     4.238384
> 1811725 507     364     4.181157
> 1811744 509     371     4.185016
> 1811764 509     377     4.231987
> 1811784 514     387     4.252449
> 1811802 515     388     4.273726
>
> My goal is to "resample" these data so that the "Time" column
> increments by a regular interval, and the other columns of data are
> the averages (or estimates) at the point in time according to
> available data points.
> I have done something that I use a regular interval that is larger
> than the naturally occurring record machine, i.e. > 120msec for
> example, and acquire an average of the available data points for any
> particular regular time interval.
>
> Now, I need to achieve resampling for smaller regular interval: i.e.
> 5msec intervals, and interpolate / intrapolate the missing data points
> from the available ones.
> i.e. I may have to split up data points into the number of the regular
> intervals that it may occupied in time.
>
> Do you know if there is any package that is doing something similar?
> And because of the size of the data and computational demand (1500
> files each with 2000-8000+ lines), can you suggest me some
> (algorithmically) more efficient way of doing this?
>
> Thanks a lot!
>
> Regards,
>
>      John
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list