У меня есть некоторый набор данных, в котором один столбец представляет собой «Экспозицию», один - «количество событий», а несколько столбцов обозначают различные типы категорий.
Exposure<-c(10,2.1,2.8,4.5,21)
NoEvents <- c(1,0,2,0,0)
Cat1<-as.factor(c("A","A","B","A","B"))
Cat2<-as.factor(c("X","Y","Y","Y","X"))
Cat3<-as.factor(c("u","v","u","w","w"))
dataTest<-data.frame(Exposure,NoEvents,Cat1,Cat2,Cat3)
dataTest
Exposure NoEvents Cat1 Cat2 Cat3
10.0 1 A X u
2.1 0 A Y v
2.8 2 B Y u
4.5 0 A Y w
21.0 0 B X w
Я хотел бы теперь (гибко) рассчитатьи нанесите на график частоту (NoEvents / Exposure), агрегированную для выбранной категории: Cat1, Cat2 или Cat3.Для фиксированного столбца категории, например, Cat1, я могу определить следующую функцию
freq_Cat <- function(data,Cat1){
data_aggr<-aggregate(. ~ Cat1, data[,c("Exposure","NoEvents","Cat1")], sum)
data_aggr[,"frequency"] <- data_aggr$NoEvents/data_aggr$Exposure
return(data_aggr)
}
и затем отобразить ее как
ggplot(freq_Cat(dataTest,Cat1), aes(x=Cat1,y=frequency)) +
geom_bar(stat="identity",fill="dodgerblue",col="black")
. Я хотел бы также сделать функцию freq_Catболее гибкое построение, так что я могу гибко выбирать, какой тип категории / столбец (Cat1, Cat2 или Cat3) объединять, не просто копируя и вставляя, и заменяя Cat1 на другой.