Aggregate data in R
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()
?
Solution 1:
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
Solution 2:
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
>
Solution 3:
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