gpt4 book ai didi

r - 在用户定义的函数中使用 Dplyr 来汇总数据然后绘制它

转载 作者:行者123 更新时间:2023-12-02 09:10:06 24 4
gpt4 key购买 nike

我正在尝试在一个函数中使用 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 作为我的数据框,var1 作为 JudicialOrientationtimevar 作为 Yearlossvar 作为我希望通过 summarise 平均的 Loss 值的向量。然而,我无法获得相同的结果,所以我觉得我遗漏了一些有关如何在闭包中使用这些函数的信息。

最佳答案

首先,在 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()
}

看参数是用 enquo() 转换的,然后用 !! 传入函数。因此,您可以在不引用的情况下传递参数。

ConsistencyPlot(df, JudicialOrientation, Year, Loss)

希望您觉得它有用。

关于r - 在用户定义的函数中使用 Dplyr 来汇总数据然后绘制它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53414314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com