我的问题是除了在summarise_each之外定义一个带有多个参数的函数,还有另一种方法可以直接在summarise_each中添加参数吗?
例如,我希望得到没有NAs的平均值。这种方式有效
mean_fun=function(x)mean(x,na.rm=TRUE)
AA_group=AA_new %>% group_by(tractID)
AA_group %>% summarise_each(funs(mean_fun))
我想知道是否有办法将na.rm=TRUE
直接添加到summarise_each
,例如more_args
选项?
如果我将mean_fun直接放到summarise_each,即
AA_group %>% summarise_each(funs(function(x)mean(x,na.rm=TRUE)))
,错误是
expecting a single value
这是否意味着每次我们想要使用summarise_each时,我们必须在其外定义一个函数?
答案 0 :(得分:12)
我猜你正在寻找.
,正如?funs
所述。
这是一个小例子,使用" iris"数据集,但在其中添加了一些NA
值。
iris2 <- iris
set.seed(1)
iris2[-5] <- lapply(iris2[-5], function(x) {
x[sample(length(x), sample(10, 1))] <- NA
x
})
现在,比较以下内容:
iris2 %>%
group_by(Species) %>%
summarise_each(funs(mean))
# Source: local data frame [3 x 5]
#
# Species Sepal.Length Sepal.Width Petal.Length Petal.Width
# 1 setosa 5.006 3.428 NA NA
# 2 versicolor NA NA NA NA
# 3 virginica NA NA NA NA
iris2 %>%
group_by(Species) %>%
summarise_each(funs(mean_fun))
# Source: local data frame [3 x 5]
#
# Species Sepal.Length Sepal.Width Petal.Length Petal.Width
# 1 setosa 5.006000 3.428000 1.455319 0.2468085
# 2 versicolor 5.939583 2.767347 4.256250 1.3208333
# 3 virginica 6.597959 2.979167 5.547917 2.0191489
iris2 %>%
group_by(Species) %>%
summarise_each(funs(mean(., na.rm = TRUE)))
# Source: local data frame [3 x 5]
#
# Species Sepal.Length Sepal.Width Petal.Length Petal.Width
# 1 setosa 5.006000 3.428000 1.455319 0.2468085
# 2 versicolor 5.939583 2.767347 4.256250 1.3208333
# 3 virginica 6.597959 2.979167 5.547917 2.0191489