r - Indexing a row and then finding all values following it within a specified time-frame from a different column -


i want use 1 column indicates start point each sample , flag points (rows) follow start point until maximum amount of time reached.

for example - data (d) looks like:

> head(d) sample seconds value flag 1 356 1 1 2 357 1 na 3 358 9 na 4 359 4 na 5 400 1 na 6 401 3 na 

a reproducible copy here:

d <- structure(list(sample = structure(c(1l, 1l, 1l, 1l, 1l, 1l, 1l, 1l, 2l, 2l, 2l, 2l, 2l, 2l, 3l, 3l, 3l, 3l, 3l, 3l, 3l, 3l, 3l ), .label = c("a", "b", "c"), class = "factor"), seconds = c(356l, 357l, 358l, 359l, 400l, 401l, 402l, 403l, 2955l, 2957l, 2959l, 3001l, 3002l, 3004l, 2548l, 2549l, 2552l, 2553l, 2554l, 2555l, 2556l, 2557l, 2558l), value = c(1l, 1l, 9l, 4l, 1l, 3l, 7l, 2l, 25l, 17l, 23l, 47l, 34l, 15l, 30l, 16l, 17l, 12l, 6l, 8l, 6l, 6l, 5l), flag = c(1l, na, na, na, na, na, na, na, 1l, na, na, na, na, na, 1l, na, na, na, na, na, na, na, na)), .names = c("sample", "seconds", "value", "flag"), class = "data.frame", row.names = c(na, -23l)) 

i want first 5 seconds of data each sample. flag indicates first row of sample (keep in mind, simplified version - real data requires set flag handle find start points). want grab row start point (flag=1) , go d$seconds , put 1 value in each row within 5 second window start point. can't add 5 because samples have point @ 4 , 6 seconds start. working large dataset trying avoid loop. ideas? (sorry data format - haven't posted before , wouldn't let me put image)

here's 1 method in base r using by:

d$within5 <- unlist( by( d, d$sample, function (x) x$seconds <= (x$seconds[!is.na(x$flag)]+5) ) ) 

result:

> head(d) sample seconds value flag within5 1 356 1 1 true 2 357 1 na true 3 358 9 na true 4 359 4 na true 5 400 1 na false 6 401 3 na false 

Comments

Popular posts from this blog

javascript - backbone.js Collection.add() doesn't `construct` (`initialize`) an object -

php - Get uncommon values from two or more arrays -

Adding duplicate array rows in Php -