R: Участок агрегированной частоты в зависимости от выбранного критерия категории - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть некоторый набор данных, в котором один столбец представляет собой «Экспозицию», один - «количество событий», а несколько столбцов обозначают различные типы категорий.

 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 на другой.

1 Ответ

0 голосов
/ 10 февраля 2019

Если вы передадите категорию в виде числа, вы можете вычислить переменную для использования.

freq_Cat <- function(data,Cat){
  Var  = paste("Cat", Cat, sep="")
  Form = formula(paste(". ~", Var))
  data_aggr<-aggregate(Form, data[,c("Exposure","NoEvents",Var)], sum)
  data_aggr[,"frequency"] <- data_aggr$NoEvents/data_aggr$Exposure
  return(data_aggr)
} 

Но теперь вместо того, чтобы вызывать его, как вы использовали, используйте что-то вроде

freq_Cat(dataTest, Cat=1)

В качестве альтернативы, если вы хотите сослаться на переменную категории по имени, вы можете использовать:

freq_Cat <- function(data,Cat){
  Form = formula(paste(". ~", Cat))
  data_aggr<-aggregate(Form, data[,c("Exposure","NoEvents",Cat)], sum)
  data_aggr[,"frequency"] <- data_aggr$NoEvents/data_aggr$Exposure
  return(data_aggr)
}

и затем получите доступ к функции следующим образом:

freq_Cat(dataTest, Cat="Country")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...