在用户定义的函数中使用Dplyr汇总数据,然后进行绘图

在用户定义的函数中使用Dplyr汇总数据,然后进行绘图,r,ggplot2,dplyr,aggregate,R,Ggplot2,Dplyr,Aggregate,我试图在函数中使用dplyr来创建一个用户定义的函数,我可以传递多个参数,用dplyr汇总数据,然后用ggplot进行绘图 下面是一些示例数据,以及我试图用dplyr执行的操作,然后进行绘图 df <-data.frame(Year = c("2006", "2006", "2006", "2007", "2007", "2007", "2008", "2009", "2010", "2010", "2009", "2009"), JudicialOrientation = c("Defe

我试图在函数中使用dplyr来创建一个用户定义的函数,我可以传递多个参数,用dplyr汇总数据,然后用ggplot进行绘图

下面是一些示例数据,以及我试图用dplyr执行的操作,然后进行绘图

df <-data.frame(Year = c("2006", "2006", "2006", "2007", "2007", "2007", "2008", "2009", "2010", "2010", "2009", "2009"), JudicialOrientation = c("Defense", "Plaintiff", "Plaintiff", "Neutral", "Defense", "Plaintiff", "Defense", "Plaintiff", "Neutral", "Neutral", "Plaintiff","Defense"), Loss = c(100000, 100, 2500, 100000, 25000, 0, 7500, 5200, 900, 100, 0, 50))

df1 <- df %>%
  group_by(Year, JudicialOrientation) %>%
  summarise(MeanLoss =mean(Loss))

ggplot(df1, aes(x = JudicialOrientation, y = MeanLoss, color = Year, group  =Year)) + 
  geom_line() +
  geom_point()
df%
汇总(平均损失=平均(损失))
ggplot(df1,aes(x=司法定向,y=平均损失,颜色=年,组=年))+
geom_线()+
几何点()
我现在正试图将其复制到一个用户函数中,以便传递不同的变量以获得类似的结果

以下是我迄今为止的尝试:

ConsistencyPlot <- function(df,var1,timevar,lossvar){

  df1 <- df %>%
    group_by_(df[timevar], df[var1]) %>%
    summarise_(MeanLoss = mean(df[lossvar]))

  ggplot(df1, aes(x = var1, y = MeanLoss, color = timevar, group = timevar)) +
    geom_line() +
    geom_point()

}

ConsistencyPlot(df,"JudicialOrientation","Year",'Loss')
稠度批次%
总结(平均损失=平均值(df[lossvar]))
ggplot(df1,aes(x=var1,y=MeanLoss,color=timevar,group=timevar))+
geom_线()+
几何点()
}
一致性地块(df,“司法定位”、“年份”、“损失”)

我正在复制相同的逻辑,并将
df
作为我的数据帧传递,
var1
作为
judicialooritation
timevar
作为
Year
lossvar
作为我希望通过
总结
平均的
损失值向量。但是,我无法得到相同的结果,因此我觉得在闭包中如何使用这些函数缺少了一些东西。

首先,在dplyr函数中,您不需要调用索引数据帧的变量,如
df[,timevar]
。只使用变量名。此外,在为数据帧编制索引时,必须指定是调用列还是行,因此
df[timevar]
是错误的

关于功能,这是一个评估问题

以下结构正在运行:

ConsistencyPlot <- function(df, var1, timevar, lossvar){
  var1 <- enquo(var1)
  timevar <- enquo(timevar)
  lossvar <- enquo(lossvar)

  df1 <- df %>%
    group_by(!!timevar, !!var1) %>%
    summarise(MeanLoss = mean(!!lossvar))

  ggplot(df1, aes(x = !!var1, y = MeanLoss, color = !!timevar, group = !!timevar)) +
    geom_line() +
    geom_point()
}

我希望你觉得它有用。

在我发布这个问题后,我意识到我引用的列名是错误的。你能给我解释一下吗!!你在干什么?这正是我想要的。非常感谢。这是一个取消报价的操作员。请参见
?“!!”
。这正是@Anonymouscoward所说的。要进行更深入的调查,请看一看。很乐意提供帮助。我想我只是想弄明白为什么引用-不引用方法有效,而不是仅仅以不引用的形式发送论点。如果我将变量发送进来,它就无法识别它们,那么为什么当它们被加引号时,它会工作,然后立即被加引号!!。我读了?enquo,如果我理解正确,quosure保持了原始环境,但是!!只是为了评估的目的删除了引号?@Coldchain9:请看下面的进一步解释
ConsistencyPlot(df, JudicialOrientation, Year, Loss)