Использование dplyr::group_by в функции внутри 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()
}
)
но это не работает Есть идеи, как мне этого добиться?
2 ответа
Решение
Вы должны подать заявку, используя 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 для оценки