2012-06-29 3 views
4

Я ищу мертвый простой пример о том, как использовать aggregate и рассчитать средства в R.Совокупные данные в R

Say, я следующий кадр данных:

A  B 
100 85 
200 95 
300 110 
400 105 

И я хочу для расчета средних значений для некоторых диапазонов со следующим результатом:

RANGE   MEAN 
100-200  90 
300-400  107.5 

Как бы я идти об этом, cast() или aggregate()?

+0

Ваш вопрос непонятен. Какую переменную вы хотите агрегировать (что вы подразумеваете под «некоторыми диапазонами»)? –

+0

О, забыл изменить заголовок для второго стола - исправлено. – Johnny

ответ

14

Если предположить, что кадр данных называется "х":

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 

С "data.table", вы можете сделать следующее:

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 
+0

Для более удобного вывода: 'aggregate (list (mean = df $ B), list (range = cut (df $ A, breaks = c (0, 200, 400))), mean)' – A5C1D2H2I1M1N2O1R2T1

3

Вот пример использования aggregate.

> 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 
> 
2

Или то же самое с cut и 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 
Смежные вопросы