Расчет среднего значения в таблицах по формулам [R] - PullRequest
6 голосов
/ 23 июля 2011

Я знаю, что такие команды, как xtabs и table, позволяют пользователю выполнять кросс-табулирование

Например, следующая команда создает сводную таблицу, в которой показано количество автомобилей с одинаковым количеством передач и цилиндров.

> xtabs(~cyl+gear, data = mtcars)
   gear
cyl  3  4  5
  4  1  8  2
  6  2  4  1
  8 12  0  2
> 

Мы можем расширить формулу, чтобы она могла показывать сумму лошадиных сил для автомобилей в каждой корзине

> xtabs(hp~cyl+gear, data = mtcars)
   gear
cyl    3    4    5
  4   97  608  204
  6  215  466  175
  8 2330    0  599
> 

Мне сейчас интересно, можно ли рассчитать среднеелошадиных сил для автомобилей в каждой корзине?например что-то вроде этого xtabs(mean(hp)~cyl+gear, data = mtcars)

Ответы [ 4 ]

10 голосов
/ 23 июля 2011

Вы можете сделать это в одну строку, используя cast из библиотеки reshape

cast(mtcars, cyl ~ gear, value = 'hp', fun = mean)
7 голосов
/ 23 июля 2011

Один интересный ответ, который я получил от r-help, выглядит следующим образом:

> attach(mtcars)
> tapply(hp,list(cyl,gear),mean)
         3     4     5
4  97.0000  76.0 102.0
6 107.5000 116.5 175.0
8 194.1667    NA 299.5
> 
3 голосов
/ 23 июля 2011

(Перемещая мой комментарий к ответу, чтобы я мог лучше отредактировать его.)

Я не уверен, как это сделать с xtabs (который я никогда раньше не использовал), но здесьЕсть несколько способов сделать это с помощью пакетов reshape и plyr.

> x = melt(mtcars, id = c("cyl", "gear"), measure = c("hp"))
> cast(x, cyl ~ gear, mean)

> x = ddply(mtcars, .(cyl, gear), summarise, hp = mean(hp))
> cast(x, cyl ~ gear)
0 голосов
/ 25 июля 2011

Еще один способ его расчета - использование функции aggregate ().Хотя вывод не в виде таблицы.(через твиттер )

> aggregate(hp~cyl+gear,data=mtcars,mean)
  cyl gear       hp
1   4    3  97.0000
2   6    3 107.5000
3   8    3 194.1667
4   4    4  76.0000
5   6    4 116.5000
6   4    5 102.0000
7   6    5 175.0000
8   8    5 299.5000
> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...