我想在以下数据集中绘制条件为A和B、A和C以及A和D的个体的百分比:
Lines <- "id sex Age A B C D
1 male 90 1 1 0 1
2 female 87 0 1 1 0
3 male 50 1 1 0 0
4 female 54 0 1 0 1"
理想情况下,一个带有X轴B、C和D以及Y轴百分比的条形图。这可以通过一个函数来实现吗?该函数可以外推到具有许多变量的设置中,并且还可以按性别和年龄进行细分>55?
这是一个基本的解决方案
下面的解决方案是使用sapply
在列之间循环,然后使用ggplot创建图表。
df <-read.table(header=TRUE, text="id sex Age A B C D
1 male 90 1 1 0 1
2 female 87 0 1 1 0
3 male 50 1 1 0 0
4 female 54 0 1 0 1")
#perform the calculations
results<- sapply(5:7, function(colid) {
cond <- names(df)[colid]
result <- sum(df[["A"]]& df[[cond]])
})
conditions<-paste0("A", names(df)[5:7])
results <- data.frame(conditions, results)
#plotting
library(ggplot2)
library(scales)
g<- ggplot(results, aes(x=conditions, y=results/ncol(df))) +
geom_col(fill="blue") +
scale_y_continuous(limits=c(0,1), labels=label_percent())
print(g)