Как я могу заставить xtabs вычислять средства вместо сумм в R? - PullRequest
9 голосов
/ 25 января 2012

У меня есть фрейм данных, где каждая строка представляет человека. Этот фрейм данных имеет две переменные: возраст и год. Я хочу составить таблицу среднего возраста в год. Как я могу это сделать?

Лучшее, что я мог придумать, было xtabs(age ~ year, dataframe), но это дает мне сумму возрастов в год.

Ответы [ 4 ]

17 голосов
/ 25 января 2012

Использование aggregate:

xtabs(hp~cyl+gear,aggregate(hp~cyl+gear,mtcars,mean))
   gear
cyl        3        4        5
  4  97.0000  76.0000 102.0000
  6 107.5000 116.5000 175.0000
  8 194.1667   0.0000 299.5000
5 голосов
/ 25 января 2012

Я рад, что xtabs решение работает для вас.У меня должен быть загружен пакет, который мешает ему (и выдает ошибку).Другое решение было бы:

tapply(dfrm$age, dfrm$year, FUN=mean)

Чтобы получить дополнительные измерения для таблицы (массива), просто продолжайте добавлять дополнительные факторы ко второму аргументу INDEX в форме list(fac1, fac2, fac3).

Применяется кпример использования mtcars:

 tapply(mtcars$hp, list(mtcars$cyl,mtcars$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

или еще более компактно:

with(mtcars, tapply(hp, list(cyl, gear), mean))
5 голосов
/ 25 января 2012

Посмотрите на пакет plyr, в частности ddply

ddply(dataframe, .(year), summarise, mean(age))

Если вам нужно использовать xtabs ... см. Ответ выше.

1 голос
/ 01 июня 2017

Другое решение состоит в том, чтобы использовать 2 функции xtabs, сначала одну для вычисления суммы возрастов, 2-ую для получения численности персонала для каждой группы, а затем получить среднее значение по сумме / численности.

Например, xtabs(возраст ~ год, фрейм данных) / xtabs (~ год, фрейм данных)

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

...