Резюме в R для частотных таблиц?

У меня есть набор пользовательских рекомендаций

review=matrix(c(5:1,10,2,1,1,2), nrow=5, ncol=2, dimnames=list(NULL,c("Star","Votes")))

и хотел использовать summary(review) показать основные свойства среднее, медиана, квартили и мин макс.

Но это возвращает резюме обеих колонок. Я воздерживаюсь от использования data.frame потому что факторы "Звезда" упорядочены. Как я могу сказать R, что Star - это упорядоченный список числовых показателей факторов, а частота их голосования?

3 ответа

Решение

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

library(Hmisc)

R> review=matrix(c(5:1,10,2,1,1,2), nrow=5, ncol=2, dimnames=list(NULL,c("Star","Votes")))

R> wtd.mean(review[, 1], weights = review[, 2])
[1] 4.0625

R> wtd.quantile(review[, 1], weights = review[, 2])
  0%  25%  50%  75% 100% 
1.00 3.75 5.00 5.00 5.00 

Я не понимаю, в чем проблема. Почему бы вам не использовать data.frame?

rv <- data.frame(star = ordered(review[, 1]), votes = review[, 2])

Вы должны конвертировать ваши data.frame к вектору:

( vts <- with(rv, rep(star, votes)) )
 [1] 5 5 5 5 5 5 5 5 5 5 4 4 3 2 1 1
Levels: 1 < 2 < 3 < 4 < 5

Затем сделайте резюме... Я просто не знаю, какое резюме, так как summary вернет вас к началу. O_o

summary(vts)
 1  2  3  4  5 
 2  1  1  2 10 

РЕДАКТИРОВАТЬ (по предложению @Prasad)

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

nvts <- as.numeric(levels(vts)[vts])  ## numeric conversion
summary(nvts)  ## "ordinary" summary
fivenum(nvts)  ## Tukey's five number summary

Просто чтобы уточнить - когда вы говорите, что хотите "среднее значение, медиана, квартили и мин / макс", вы говорите о количестве звезд? например среднее значение = 4,062 звезды? Затем, используя код aL3xa, было бы что-то вроде summary(as.numeric(as.character(vts))) будь тем, кем хочешь быть?

Другие вопросы по тегам