R boxplot总结

时间:2010-09-08 02:40:58

标签: r boxplot

根据下面的(简化)数据表示用户在三个选项之间进行选择,我想根据值的因子创建一组用户选择值的百分比的箱线图。所以我想要三个箱图,百分比用户选择0,1和2。

我确定我错过了一些明显的东西,就像我经常使用R.我可以使用by(dat, dat$user, function(user) {table(user$value)/length(user$value)*100})获得百分比,但不知道如何将其转换为箱形图。

希望这是有道理的。

user|value
1|2
1|1
1|0
1|2
1|0
2|2
2|2
2|2
2|0
2|2
3|2
3|0
3|1
3|0
3|1
4|2
4|0
4|1
4|0
4|1
5|2
5|0
5|1
5|0
5|1
6|2
6|0
6|0
6|1
6|2
7|0
7|0
7|1
7|0
7|1
8|2
8|2
8|1
8|1
8|2
9|1
9|0
9|0
9|0
9|0
10|1
10|2
10|0
10|2
10|1

2 个答案:

答案 0 :(得分:1)

我会使用plyr包创建摘要。首先,您应该将value转换为一个因子,这样当某个用户从未选择某个值时,该值将为0%。

dat$value <- factor(dat$value)

现在,你编写了一个带有数据框的汇总函数(从技术上讲,这一步可以进入下一步,但这种方式更加清晰。)

p.by.user <- function(df){
  data.frame(prop.table(table(df$value)))
}

然后,将此函数应用于dat定义的user的每个子集。

dat.summary <- ddply(dat, .(user), p.by.user)

此数据的基本图形框图将按此完成。

with(dat.summary, boxplot(Freq ~ Var1, ylim = c(0,1)))

如果你不介意我的两分钱,我不知道箱形图是使用这种数据的正确方法。这不是非常密集的数据(如果您的样本是真实的),并且箱图不会捕获决策之间的依赖关系。也就是说,如果某个用户经常选择1超级,那么他们必须更频繁地选择其他用户。

您可以为每个用户尝试填充条形图,如果您使用ggplot2则不需要任何预先汇总。代码看起来像这样

ggplot(dat, aes(factor(user), fill = value)) + geom_bar()
    # or, to force the range to be between 0 and 1
    # + geom_bar(position = "fill")

答案 1 :(得分:0)

这就是你想要的东西吗?

user <- rep(1:10,each=5)
value <- sample(0:2,50,replace=T)
dat <- data.frame(user,value)

percent <- unlist(
    by(dat, dat$user,
        function(user) {
            table(user$value)/length(user$value)*100
        }
    )
)

# make a vector with all percentages
percent <- unlist(percent)
# extract the necessary info from the names
value <- gsub("\\d+\\.(\\d)","\\1",names(percent))

boxplot(percent~value)