我有每一行一次观测的数据:
rm(list = ls(all = TRUE))
mydf <- data.frame(kind = sample(c("good", "bad"), 100, replace = TRUE), var1 = sample(c("yes", "no", "yes"), 100, replace = TRUE), var2 = sample(c("yes", "no"), 100, replace = TRUE), var3 = sample(c( "yes", "no"), 100, replace = TRUE), var4 = sample(c( "yes", "no", "yes", "no", "NA"), 100, replace = TRUE), var5 = sample(c( "yes", "no", "yes", "no", "NA"), 100, replace = TRUE), var6 = sample(c( "yes", "no", "yes", "no", "NA"), 100, replace = TRUE))我需要:用并排的条形对制作一个堆叠的条形图,每种都有一个条形图(好的和坏的),显示每种中有多少条有0“是”var,有多少有1 "yes“var等等,对于所有6 var,最多显示”是“。Y轴=计数,X轴=七类(0是vars,1 yes var,等等).每个条形应该是一个堆叠的条形图,颜色编码显示每个变量对条形图的总高度的贡献。NAs被视为“否”。此外,超图线显示七个X轴类别中每个类别的计数比(很好)/count(坏)。
发布于 2015-05-17 04:34:52
根据你的描述,这是我理解你想要达到的目标。它由三个步骤组成:
所以要解决每一个问题。
让我们假设您的数据如下:
mydf <- data.frame(kind = sample(c("good", "bad"), 100, replace = TRUE),
var1 = sample(c("yes", "no", "yes"), 100, replace = TRUE),
var2 = sample(c("yes", "no"), 100, replace = TRUE),
var3 = sample(c( "yes", "no"), 100, replace = TRUE),
var4 = sample(c( "yes", "no", "yes", "no", NA), 100, replace = TRUE),
var5 = sample(c( "yes", "no", "yes", "no", NA), 100, replace = TRUE),
var6 = sample(c( "yes", "no", "yes", "no", NA), 100, replace = TRUE))1
将所有NA替换为"no“就是:
mydf[is.na(mydf)] <- "no"在这里,我们通过data.frame搜索,并使用赋值操作符将所有的na替换为no。
2
为了以逐行方式添加所有内容,我使用了apply函数。在apply函数中,您可以使用?apply来确定参数,但简单地说,您(第1 arg)只指定data.frame,(第2 arg)指定方向,1指定行方向,2指定列方向,(第3 arg)指定要应用于方向的函数。
mydf$total.yes <- apply(mydf, 1, function(x) {
return(length(x[x=="yes"]))
})3
最后是情节。制作情节最简单、最美观的方法是使用ggplot。通过键入install.packages("ggplot2")安装它。对于条形图,我将引用这个documentation,否则代码将如下所示。
library(ggplot2)
ggplot(mydf, aes(total.yes, fill=kind)) +
geom_bar(position="dodge")这将产生下面的情节:

我希望这能回答你想要的问题。完整的代码如下:
mydf <- data.frame(kind = sample(c("good", "bad"), 100, replace = TRUE),
var1 = sample(c("yes", "no", "yes"), 100, replace = TRUE),
var2 = sample(c("yes", "no"), 100, replace = TRUE),
var3 = sample(c( "yes", "no"), 100, replace = TRUE),
var4 = sample(c( "yes", "no", "yes", "no", NA), 100, replace = TRUE),
var5 = sample(c( "yes", "no", "yes", "no", NA), 100, replace = TRUE),
var6 = sample(c( "yes", "no", "yes", "no", NA), 100, replace = TRUE))
library(ggplot2)
# replace all NA values to no, this step seems redundant because you're only
# counting yes's
mydf[is.na(mydf)] <- "no"
# for each row figure out how many "yes" there are...
mydf$total.yes <- apply(mydf, 1, function(x) {
return(length(x[x=="yes"]))
})
# see example here: http://docs.ggplot2.org/0.9.3.1/geom_bar.html
#using your data
ggplot(mydf, aes(total.yes, fill=kind)) +
geom_bar(position="dodge")实际上,在默认情况下,geom_bar是堆叠的(参见documentation,如果它是堆叠的,则如下所示:
ggplot(mydf, aes(total.yes, fill=kind)) +
geom_bar()

https://stackoverflow.com/questions/30282990
复制相似问题