根据您的描述,这就是我理解您想要实现的目标。它由三个步骤组成:
- 将所有 NA 替换为“否”。
- 以逐行方式将所有“是”相加。
- 实际绘制图形。
所以解决每一点。
假设您的数据如下:
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
用“no”替换所有 NA 只需:
mydf[is.na(mydf)] <- "no"
在这里,我们正在搜索 data.frame 并na
使用赋值运算符将所有内容替换为 no。
2
为了逐行添加所有内容,我使用了该apply
函数。在 apply 函数中,您可以使用?apply
来确定参数,但简而言之,您(第一个参数)只需指定data.frame
方向,(第二个参数)指定方向,1 表示按行,2 表示按列,(第 3 个参数) 指定您希望应用于方向的函数。
mydf$total.yes <- apply(mydf, 1, function(x) {
return(length(x[x=="yes"]))
})
3
最后是剧情。制作情节最简单、最美观的方法是使用ggplot
. 通过键入安装它install.packages("ggplot2")
。对于条形图,我将参考此 [文档](此处:http ://docs.ggplot2.org/0.9.3.1/geom_bar.html ),否则代码将如下所示。
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
默认情况下实际上是堆叠的(请参阅[文档](此处:http ://docs.ggplot2.org/0.9.3.1/geom_bar.html ),如果它被堆叠,它将看起来像以下内容:
ggplot(mydf, aes(total.yes, fill=kind)) +
geom_bar()