Я пытаюсь написать функцию в R для подведения итогов таблицы.Ниже приведен пример функции, и я использую данные Iris в качестве теста.
test_func <- function(data, by_var_nm) {
by_var_nm <- deparse(substitute(by_var_nm))
tbl_test_sum <- data %>%
group_by(data[[by_var_nm]]) %>%
summarise(
count = n()
)
tbl_test_sum
}
test_func(iris, Species)
Как вы могли видеть, в выходных данных в следующем разделе есть проблема, при которой первая переменная в таблиценазывается «данные [[by_var_nm]]» вместо «видов».Можно ли как-нибудь сохранить исходное имя переменной во время процесса суммирования?
# A tibble: 3 x 2
`data[[by_var_nm]]` count
<fct> <int>
1 setosa 50
2 versicolor 50
3 virginica 50
Спасибо.
Спасибо всем за очень полезный ответ.Я попробовал решения, и, похоже, ответ Снорама решил мою начальную проблему довольно хорошо.Однако после того, как я объединил все воедино, я не мог заставить последний фрагмент сюжета работать должным образом.Идея состоит в том, что я хочу нанести процентное распределение на «var_nm» и сгруппировать их по «by_var_nm».Проблема, которую я получил, состоит в том, что гистограмма, а также процентная доля для метки данных выстроены неправильно.
test_func <- function(data, var_nm, by_var_nm) {
var_nm <- deparse(substitute(var_nm))
by_var_nm <- deparse(substitute(by_var_nm))
tbl_test_sum <- as.data.frame(table(data[[by_var_nm]], data[[var_nm]]))
names(tbl_test_sum) <- c(by_var_nm, var_nm, "count")
# tbl_test_sum
tbl_test_total <- as.data.frame(table(data[[by_var_nm]]))
names(tbl_test_total) <- c(by_var_nm, "total")
# tbl_test_total
tbl_test_pctg <- full_join(tbl_test_sum, tbl_test_total, by = by_var_nm) %>%
mutate(
percentage = count / total
)
# tbl_test_pctg
ggplot(data=tbl_test_pctg, aes(x = tbl_test_pctg[[var_nm]], y = percentage, fill = tbl_test_pctg[[var_nm]])) +
geom_bar(stat="identity") +
geom_text(aes(label = scales::percent(percentage))) +
facet_grid(tbl_test_pctg[[by_var_nm]]~.) +
coord_flip()
}
test_func(mtcars, cyl, am)