Skip to content

Instantly share code, notes, and snippets.

@tdsmith
Created August 5, 2014 01:03
Show Gist options
  • Save tdsmith/2babd6820056e1e93889 to your computer and use it in GitHub Desktop.
Save tdsmith/2babd6820056e1e93889 to your computer and use it in GitHub Desktop.
df = data.frame(id=rep(c("A","B","C","D"), each=5),n=1:20)
flags = numeric(20)
flags[c(4,5,7)] = 1
df$flag = flags
reduce_me = function(df, flagname)
{
to_copy = integer(NROW(df)*2) * NA
ptr = 1
for (i in seq_along(df[,1])) {
if(!df[i, flagname]) next
candidates = c((i-5):(i-1), (i+1):(i+5))
candidates = candidates[candidates >= 1 & candidates <= NROW(df)]
to_copy[ptr:(ptr+length(candidates)-1)] = candidates
ptr = ptr + length(candidates)
}
to_copy = to_copy[!is.na(to_copy)]
df[to_copy,]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment