Резюме в 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)))
будь тем, кем хочешь быть?