我有一组用户建议
review=matrix(c(5:1,10,2,1,1,2), nrow=5, ncol=2, dimnames=list(NULL,c("Star","Votes")))
并想用来summary(review)
显示基本属性mean、median、quartiles 和 min max。
但它会返回两列的摘要。我不使用data.frame
,因为“星”因子是有序的。
我如何告诉 R Star 是一个有序的因子数字分数列表,而投票是它们的频率?
我有一组用户建议
review=matrix(c(5:1,10,2,1,1,2), nrow=5, ncol=2, dimnames=list(NULL,c("Star","Votes")))
并想用来summary(review)
显示基本属性mean、median、quartiles 和 min max。
但它会返回两列的摘要。我不使用data.frame
,因为“星”因子是有序的。
我如何告诉 R Star 是一个有序的因子数字分数列表,而投票是它们的频率?
如果 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)))
是你想要的吗?