[英]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.