添加更多参数以在dplyr中汇总

时间:2014-09-28 03:00:36

标签: r dplyr

我的问题是除了在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时,我们必须在其外定义一个函数?

1 个答案:

答案 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