2015-08-30 2 views
0

У меня есть данные кадр «Даты», что это похоже на следующее:агрегированных данные кадра команды в г

team a b c 
1  5 6 2 
1  2 8 1 
1  5 10 30 
2  1 3 55 
2  4 4 4 
2  6 11 66 
3  10 1 .5 
3  3 4 24 
3  4 44 60 

Я пытаюсь превратить это в данной раму так, что средний каждая переменная (a, b и c) вычисляется для каждой команды. Так что конечный результат выглядит следующим образом:

team a b c 
1  4 8 11 
2  3.7 6 41.7 
3  5.7 16.3 28.2 

Они не все должны быть до 1 десятичного знака, но суть та же. Спасибо!

ответ

2

Мы можем использовать либо dplyr/data.table, либо base Raggregate.

Использование dplyr мы группу по 'команде', а затем с summarise_each, мы получаем mean

library(dplyr) 
dat %>% 
    group_by(team) %>% 
    summarise_each(funs(mean)) 

Или в data.table, мы преобразовать 'data.frame' в 'data.table' (setDT(dat)), сгруппированные по команде, мы петляем с lapply, чтобы получить «среднее» из других столбцов.

library(data.table) 
setDT(dat)[, lapply(.SD, mean), team] 

Или мы можем использовать метод формула aggregate от base R получить mean. Мы должны указать . на LHS формулы, чтобы обозначить все остальные столбцы.

aggregate(.~team, dat, mean)