How about creating an index using multiple columns.

a <- with(d, aggregate(dur, list(rt=rt,tid=tid,mood=mood,roi=roi), sum)) b <- with(d, aggregate(x, list(rt=rt,tid=tid,mood=mood,roi=roi), mean))
c <- merge(a, b, by=c("rt","tid","mood", "roi"))

I suppose one could save some time by not running aggregate twice on the same dataset, but I am not sure how.

Nikhil

On 8 Dec 2009, at 7:50AM, Titus von der Malsburg wrote:

Hi, I have a data frame and want to merge adjacent rows if some condition is met. There's an obvious solution using a loop but it is prohibitively slow because my data frame is large. Is there an efficient canonical solution for
that?

head(d)
    rt dur tid  mood roi  x
55 5523 200   4  subj   9  5
56 5523  52   4  subj   7 31
57 5523 209   4  subj   4  9
58 5523 188   4  subj   4  7
70 4016 264   5 indic   9 51
71 4016 195   5 indic   4 14

The desired result would have consecutive rows with the same roi value merged. dur values should be added and x values averaged, other values don't differ in
these rows and should stay the same.

head(result)
    rt dur tid  mood roi  x
55 5523 200   4  subj   9  5
56 5523  52   4  subj   7 31
57 5523 397   4  subj   4  8
70 4016 264   5 indic   9 51
71 4016 195   5 indic   4 14

There's also a solution using reshape.  It uses an index for blocks

 d$index <- cumsum(c(TRUE,diff(d$roi)!=0))

melts and then casts for every column using an appropriate fun.aggregate. However, this is a bit cumbersome and also I'm not sure how to make sure that
I get the original order of rows.

Thanks for any suggestion.

 Titus

______________________________________________
R-help@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.

______________________________________________
R-help@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.

Reply via email to