5

I'm looking for a dead simple example on how to use aggregate and calculate means in R.

Say, I have the following data frame:

A      B
100    85
200    95
300    110
400    105

And I want to calculate the mean values for some ranges with the following result:

RANGE         MEAN
100-200       90
300-400       107.5

How would I go about doing this, cast() or aggregate()?

Bo Persson
  • 90,663
  • 31
  • 146
  • 203
Johnny
  • 313
  • 1
  • 5
  • 10

3 Answers3

14

Assuming your data frame is named "x":

aggregate(x$B, list(cut(x$A, breaks=c(0, 200, 400))), mean)
#     Group.1     x
# 1   (0,200]  90.0
# 2 (200,400] 107.5

With "data.table", you can do the following:

library(data.table)
as.data.table(x)[, .(RANGE = mean(B)), by = .(MEAN = cut(A, c(0, 200, 400)))]
#         MEAN RANGE
# 1:   (0,200]  90.0
# 2: (200,400] 107.5
A5C1D2H2I1M1N2O1R2T1
  • 190,393
  • 28
  • 405
  • 485
3

Here is a basic example of aggregate usage.

> foo = data.frame(A=c(100,200,300,400),B=c(85,95,110,105))
> aggregate(foo$B,by=list(foo$A<250),FUN=mean)
  Group.1     B
1   FALSE 107.5
2    TRUE  90.0
> 
jrouquie
  • 4,315
  • 4
  • 27
  • 43
2

Or the same with cut and tapply

 foo <- data.frame(A=c(100,200,300,400),B=c(85,95,110,105))
 tapply(foo$B, cut(foo$A, breaks=seq(0, 400, 200)), mean)
  (0,200] (200,400] 
     90.0     107.5 
johannes
  • 14,043
  • 5
  • 40
  • 51