繁体   English   中英

R boxplot总结

[英]R boxplot over summary

从下面的(简化的)数据中,该数据代表用户在三个选项之间进行选择,我想基于值的因素来创建一组框形图,以显示用户选择值的次数百分比。 所以我要三个框图,用户选择的百分比为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

我将使用plyr软件包创建摘要。 首先,您应该将value转换为因数,以便当某些用户从不选择某个值时,该值将为0%。

dat$value <- factor(dat$value)

现在,您编写需要一个数据框的摘要函数(从技术上讲,此步骤可以拖入下一步,但这样更易读)。

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

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

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")

您正在寻找类似这样的东西吗?

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM