在用户定义的函数中使用Dplyr汇总数据,然后进行绘图
我试图在函数中使用dplyr来创建一个用户定义的函数,我可以传递多个参数,用dplyr汇总数据,然后用ggplot进行绘图 下面是一些示例数据,以及我试图用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
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)