summarise_each 被弃用,funs 被 list 取代
library(dplyr)
Data %>%
group_by(Treatment) %>%
summarise_at(vars(-group_cols()), list(mean = ~mean(., na.rm = TRUE),
sd = ~sd(., na.rm = TRUE),
se=~ sd(., na.rm = TRUE)/sqrt(n())))
如果我们不确定列类型,请检查
str(Data)
并仅将函数应用于数字列。在前面的代码中不做太多改动,将数字列的 summarise_at 替换为 summarise_if
Data %>%
group_by(Treatment, Rep) %>%
summarise_if(is.numeric, list(mean = ~mean(., na.rm = TRUE),
sd = ~sd(., na.rm = TRUE),
se=~ sd(., na.rm = TRUE)/sqrt(n())))
如果某些列具有class factor 并且需要用于mean/sd,则首先将这些列/列转换为numeric 和as.numeric(as.character(Data[[yourcolumn]]))
可以用iris数据复现
data(iris)
iris %>%
group_by(Species) %>%
summarise_at(vars(-group_cols()), list(mean = ~mean(., na.rm = TRUE),
sd = ~sd(., na.rm = TRUE),
se=~ sd(., na.rm = TRUE)/sqrt(n())))
# A tibble: 3 x 13
# Species Sepal.Length_me… Sepal.Width_mean Petal.Length_me… Petal.Width_mean Sepal.Length_sd Sepal.Width_sd Petal.Length_sd
# <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 setosa 5.01 3.43 1.46 0.246 0.352 0.379 0.174
#2 versic… 5.94 2.77 4.26 1.33 0.516 0.314 0.470
#3 virgin… 6.59 2.97 5.55 2.03 0.636 0.322 0.552
# … with 5 more variables: Petal.Width_sd <dbl>, Sepal.Length_se <dbl>, Sepal.Width_se <dbl>, Petal.Length_se <dbl>,
# Petal.Width_se <dbl>
在OP的帖子中,一些函数具有匿名函数,na.rm = TRUE似乎来自mean(不清楚)。