4

我有一组用户建议

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 是一个有序的因子数字分数列表,而投票是它们的频率?

4

3 回答 3

5

如果 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 
于 2011-02-05T14:30:04.453 回答
2

我不明白有什么问题。为什么不应该使用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
于 2011-02-05T13:32:35.173 回答
0

澄清一下——当你说你想要“平均值、中位数、四分位数和最小值/最大值”时,你是在谈论星星的数量吗?例如平均值 = 4.062 颗星?然后使用 aL3xa 的代码,会summary(as.numeric(as.character(vts)))是你想要的吗?

于 2011-02-05T14:15:53.593 回答