在此输入图像描述 https://i.stack.imgur.com/Z48fD.png
我有上面的数据,我想根据 SalesInThousand 变量的平均值聚合一些变量。
我正在创建一个函数并在循环中运行它,这样我就不会重复。
这就是我正在做的事情:
vars <- factor(names(Marketing %>%
select(-MarketID , -LocationID ,
-AgeOfStore , -SalesInThousands)))
function1 <- function(x){
Sales_Aggregate <- Marketing %>%
group_by(x) %>%
summarise(sales_mean = mean(SalesInThousands))
}
function1(Marketing$MarketSize)
for(i in vars){
print(paste('Sales Aggregate by' , i))
print(function1(i))
}
但我收到此错误:
grouped_df_impl(data, unname(vars), drop) 中的错误:
柱子x
未知
当我尝试这个时:
testFunction <- function(Marketing , x) {
x <- enquo(x)
df %>%
group_by(!! x) %>%
summarize(mean.Petal.Width = mean(Petal.Width))
testFunction(x = 'MarketSize')
我收到此错误:
UseMethod("group_by_") 中的错误:
没有适用于“group_by_”的方法应用于“function”类的对象
我无法弄清楚我做错了什么。
我是 R 和创建函数的新手,因此需要帮助。
提前致谢
Abhik
函数参数应该与函数内部的参数匹配,即如果数据的参数是“df”,则它在函数内部也应该相同
testFunction <- function(df , x) {
x <- enquo(x)
df %>%
group_by(!! x) %>%
summarize(mean.Petal.Width = mean(Petal.Width))
}
testFunction(iris, Species)
# A tibble: 3 x 2
# Species mean.Petal.Width
# <fctr> <dbl>
#1 setosa 0.246
#2 versicolor 1.326
#3 virginica 2.026
如果我们需要聚合多个变量,那么使用summarise_at
or summarise_all
testFunction <- function(df , varS, x) {
x <- enquo(x)
df %>%
group_by(!! x) %>%
summarize_at(vars(varS), funs(mean = mean(.)))
}
nm1 <- names(iris)[1:3]
testFunction(iris, nm1, Species)
# A tibble: 3 x 4
# Species Sepal.Length_mean Sepal.Width_mean Petal.Length_mean
# <fctr> <dbl> <dbl> <dbl>
#1 setosa 5.006 3.428 1.462
#2 versicolor 5.936 2.770 4.260
#3 virginica 6.588 2.974 5.552
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)