r: dplyr 函数,用于制作具有多个组的长格式
r: dplyr function to make long format with multiple groups
我正在尝试将此代码转换为一个函数:
mtcars %>% group_by(gear) %>% select(hp, disp) %>%
summarise_all(funs(n=sum(!is.na(.)), mean=mean(.,na.rm=T))) %>%
gather(variable, value, -gear) %>%
arrange(gear, sub('_.*', '', variable), sub('.*_', '', variable)) %>%
separate(variable, into = c('var', 'metric'), '_')
它的作用是创建一个数据框,我可以轻松地将其导入 Excel 并使用它创建枢轴。我尝试了以下方法,但它似乎不起作用:
mean_func <- function(vars,groups) {
results <- test %>% group_by_at(vars(one_of(groups))) %>%
summarise_at(vars(starts_with(vars)), funs(n=sum(!is.na(.)), mean=mean(.,na.rm=T))) %>%
gather_(variable, value, -groups) %>%
arrange_(groups) %>%
separate_(variable, into = c('var', 'metric'), '_'); View(results)
}
似乎问题出在 gather
语句的某处,但我不确定这里可能出了什么问题。有什么想法吗?
使用一些 tidy
清理来更改分组变量并使用 group_by_ 进行编程。
library(tidyverse)
mean_func <- function(vars, groups) {
groups = enquo(groups)
vars %>%
group_by_(groups) %>%
dplyr::select(hp, disp) %>%
summarise_all(funs(n=sum(!is.na(.)), mean=mean(.,na.rm=T))) %>%
gather(variable, value, -!!groups) %>%
arrange(!!groups, sub('_.*', '', variable), sub('.*_', '', variable)) %>%
separate(variable, into = c('var', 'metric'), '_')
}
mean_func(mtcars, gear)
我正在尝试将此代码转换为一个函数:
mtcars %>% group_by(gear) %>% select(hp, disp) %>%
summarise_all(funs(n=sum(!is.na(.)), mean=mean(.,na.rm=T))) %>%
gather(variable, value, -gear) %>%
arrange(gear, sub('_.*', '', variable), sub('.*_', '', variable)) %>%
separate(variable, into = c('var', 'metric'), '_')
它的作用是创建一个数据框,我可以轻松地将其导入 Excel 并使用它创建枢轴。我尝试了以下方法,但它似乎不起作用:
mean_func <- function(vars,groups) {
results <- test %>% group_by_at(vars(one_of(groups))) %>%
summarise_at(vars(starts_with(vars)), funs(n=sum(!is.na(.)), mean=mean(.,na.rm=T))) %>%
gather_(variable, value, -groups) %>%
arrange_(groups) %>%
separate_(variable, into = c('var', 'metric'), '_'); View(results)
}
似乎问题出在 gather
语句的某处,但我不确定这里可能出了什么问题。有什么想法吗?
使用一些 tidy
清理来更改分组变量并使用 group_by_ 进行编程。
library(tidyverse)
mean_func <- function(vars, groups) {
groups = enquo(groups)
vars %>%
group_by_(groups) %>%
dplyr::select(hp, disp) %>%
summarise_all(funs(n=sum(!is.na(.)), mean=mean(.,na.rm=T))) %>%
gather(variable, value, -!!groups) %>%
arrange(!!groups, sub('_.*', '', variable), sub('.*_', '', variable)) %>%
separate(variable, into = c('var', 'metric'), '_')
}
mean_func(mtcars, gear)