R:剧情聚集频率取决于所选择的类别的判断标准

问题描述 投票:0回答:1

我有一些数据集有一列是“曝光”,其中的“事件数”和几列标记不同类别的类型。

 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 /曝光):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。

r ggplot2 aggregate categories
1个回答
0
投票

如果您在该类别通过为数字,你可以计算使用的变量。

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")
© www.soinside.com 2019 - 2024. All rights reserved.