Как получить среднее значение, медиану и другую статистику по всей матрице, массиву или фрейму данных? - PullRequest
30 голосов
/ 24 февраля 2012

Я знаю, что это основной вопрос, но по какой-то странной причине я не могу найти ответ.

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

Ответы [ 3 ]

24 голосов
/ 24 февраля 2012

Так как это справедливо, я собираюсь рассмотреть это более всесторонне, включая «и т. Д.» шт в дополнение к mean и median.

  1. Для матрицы или массива, как заявили другие, mean и median вернут одно значение. Однако var вычислит ковариации между столбцами двумерной матрицы. Интересно, что для многомерного массива var возвращается к возвращению одного значения. sd на 2-й матрице будет работать, но не рекомендуется, возвращая стандартное отклонение столбцов. Более того, mad возвращает одно значение в двумерной матрице и в многомерном массиве. Если вы хотите вернуть единственное значение, самый безопасный маршрут - сначала принудительно ввести as.vector(). Веселились еще?

  2. Для data.frame, mean не рекомендуется, но снова будет действовать на столбцы отдельно. median требует, чтобы вы сначала указали вектор, или unlist. Как и раньше, var вернет ковариации, а sd снова устареет, но вернет стандартное отклонение столбцов. mad требует, чтобы вы указали вектор или unlist. В общем случае для data.frame, если вы хотите, чтобы что-то воздействовало на все значения, вы, как правило, просто unlist сначала.

Редактировать: Последние последние новости (): В версии 3.0.0 означает, что значение .data.frame не определено:

o   mean() for data frames and sd() for data frames and matrices are
defunct.
14 голосов
/ 24 февраля 2012

По умолчанию mean и median и т. Д. Работают для всего массива или матрицы.

например:.

# array:
m <- array(runif(100),dim=c(10,10))
mean(m) # returns *one* value.

# matrix:
mean(as.matrix(m)) # same as before

Для фреймов данных вы можете сначала привести их к матрице (причина того, что по умолчанию это по сравнению со столбцами, заключается в том, что в фрейме данных могут быть столбцы со строками, что нельзя принять как среднее значение):

# data frame
mdf <- as.data.frame(m)
# mean(mdf) returns column means
mean( as.matrix(mdf) ) # one value.

Просто будьте осторожны, чтобы в вашем фрейме данных были все числовые столбцы, прежде чем привести к матрице. Или исключить нечисловые.

0 голосов
/ 22 октября 2018

Вы можете использовать library dplyr через install.packages ('dplyr'), а затем

dataframe.mean <- dataframe %>%
  summarise_all(mean) # replace for median
...