根据您的描述,这就是我了解您想要实现的目标。它由三个步骤组成:
- 将所有 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
用“否”替换所有 NA 只需:
mydf[is.na(mydf)] <- "no"
我们在这里搜索 data.frame 并使用赋值运算符将所有 na 替换为 no。
2
为了以逐行方式添加所有内容,我使用了apply 函数。在 apply 函数中,您可以使用?apply 来确定参数,但简而言之,您(第一个参数)只需指定data.frame,(第二个参数)指定方向,1 表示按行,2 表示列-wise, (3rd arg) 指定你希望应用于方向的函数。
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()