我试图在函数中使用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()
我现在尝试将其复制到用户函数中,以便可以传递不同的变量以获得类似的结果。
以下是我目前的尝试:
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
作为我的 Dataframe ,var1
作为JudicialOrientation
,timevar
作为Year
,lossvar
作为我的Loss
值的向量,我希望通过summarise
进行平均。但是我不能得到相同的结果,所以我觉得我错过了一些关于如何在闭包中使用这些函数的东西。
1条答案
按热度按时间hzbexzde1#
首先,在dplyr函数中,你不需要像
df[, timevar]
那样调用索引 Dataframe 的变量。只需要使用变量名。此外,当索引 Dataframe 时,你必须指定你是调用列还是行,所以df[timevar]
是错误的。关于功能,这是一个评估的问题。
下面的结构正在工作:
注意,参数是用
enquo()
转换的,然后用!!
传入函数。因此,您可以传递参数而不使用引号。希望你觉得有用。