我试图理解dplyr使用的非标准评估,但没有成功。我想要一个简短的函数,返回指定变量的汇总统计信息(N、均值、标准差、中位数、四分位距、最小值、最大值)。
我的函数的简化版本...
my_summarise <- function(df = temp,
to.sum = 'eg1',
...){
## Summarise
results <- summarise_(df,
n = ~n(),
mean = mean(~to.sum, na.rm = TRUE))
return(results)
}
并使用一些虚拟数据运行它...
set.seed(43290)
temp <- cbind(rnorm(n = 100, mean = 2, sd = 4),
rnorm(n = 100, mean = 3, sd = 6)) %>% as.data.frame()
names(temp) <- c('eg1', 'eg2')
mean(temp$eg1)
[1] 1.881721
mean(temp$eg2)
[1] 3.575819
my_summarise(df = temp, to.sum = 'eg1')
n mean
1 100 NA
N已经计算,但平均值没有计算出来,不知道为什么。
最终我希望我的函数更加通用,类似于...
my_summarise <- function(df = temp,
group.by = 'group'
to.sum = c('eg1', 'eg2'),
...){
results <- list()
## Select columns
df <- dplyr::select_(df, .dots = c(group.by, to.sum))
## Summarise overall
results$all <- summarise_each(df,
funs(n = ~n(),
mean = mean(~to.sum, na.rm = TRUE)))
## Summarise by specified group
results$by.group <- group_by_(df, ~to.group) %>%
summarise_each(df,
funs(n = ~n(),
mean = mean(~to.sum, na.rm = TRUE)))
return(results)
}
在我转向更复杂的版本之前(我使用this example作为指导),我需要先让简单版本中的评估工作,因为那是绊脚石,对dplyr::select()
的调用运行良好。
感谢您提供任何有关我做错了哪些方面的建议。
提前致谢