在 apply 的函数中使用 dplyr::group_by
using dplyr::group_by in a function within apply
我想为我的数据集中的一组分组变量生成很好的摘要,其中对于每个组,我将显示前 6 个频率及其相关比例。我可以使用以下语法为单个分组变量获取此信息:
my_db %>%
group_by(my_var) %>%
summarise(n=n()) %>%
mutate(pc=scales::percent(n/sum(n))) %>%
arrange(desc(n)) %>%
head()
如何修改此表达式以便它可以在应用函数中使用?
例如使用 mtcars,我试过这样的东西:
apply(mtcars[c(2:4,11)], 2,
function(x) {
group_by(!!x) %>%
summarise(n=n()) %>%
mutate(pc=scales::percent(n/sum(n))) %>%
arrange(desc(n)) %>% head()
}
)
但它不起作用。知道我该如何实现吗?
您应该使用 colnames(dat)
申请以获得正确的分组:
dat <- mtcars[c(2:4,11)]
grp <- function(x) {
group_by(dat,!!as.name(x)) %>%
summarise(n=n()) %>%
mutate(pc=scales::percent(n/sum(n))) %>%
arrange(desc(n)) %>% head()
}
lapply(colnames(dat), grp)
apply(mtcars[c(2:4,11)], 2,
function(x) {
mtcars %>%
group_by(x= !!x) %>%
summarise(n=n()) %>%
mutate(pc=scales::percent(n/sum(n))) %>%
arrange(desc(n)) %>% head()
}
)
你只需要父 df 来评估
我想为我的数据集中的一组分组变量生成很好的摘要,其中对于每个组,我将显示前 6 个频率及其相关比例。我可以使用以下语法为单个分组变量获取此信息:
my_db %>%
group_by(my_var) %>%
summarise(n=n()) %>%
mutate(pc=scales::percent(n/sum(n))) %>%
arrange(desc(n)) %>%
head()
如何修改此表达式以便它可以在应用函数中使用?
例如使用 mtcars,我试过这样的东西:
apply(mtcars[c(2:4,11)], 2,
function(x) {
group_by(!!x) %>%
summarise(n=n()) %>%
mutate(pc=scales::percent(n/sum(n))) %>%
arrange(desc(n)) %>% head()
}
)
但它不起作用。知道我该如何实现吗?
您应该使用 colnames(dat)
申请以获得正确的分组:
dat <- mtcars[c(2:4,11)]
grp <- function(x) {
group_by(dat,!!as.name(x)) %>%
summarise(n=n()) %>%
mutate(pc=scales::percent(n/sum(n))) %>%
arrange(desc(n)) %>% head()
}
lapply(colnames(dat), grp)
apply(mtcars[c(2:4,11)], 2,
function(x) {
mtcars %>%
group_by(x= !!x) %>%
summarise(n=n()) %>%
mutate(pc=scales::percent(n/sum(n))) %>%
arrange(desc(n)) %>% head()
}
)
你只需要父 df 来评估