gpt4 book ai didi

r - 在 R 函数中使用 summarize() 进行分组汇总时保留原始变量名

转载 作者:行者123 更新时间:2023-12-02 01:00:44 28 4
gpt4 key购买 nike

我正在尝试在 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)

如您所见,下一节的输出有一个问题,其中表中的第一个变量称为“data[[by_var_nm]]”而不是“Species”。有什么方法可以在汇总过程中保持原始变量名称?

# A tibble: 3 x 2
`data[[by_var_nm]]` count
<fct> <int>
1 setosa 50
2 versicolor 50
3 virginica 50

谢谢。

谢谢大家的非常有帮助的回答。我尝试了这些解决方案,似乎 snoram 的回答很好地解决了我最初的问题。但是,在我将所有内容组合在一起之后,我无法让最后一点情节正常运行。这个想法是我想绘制“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)

enter image description here

最佳答案

建议与 Alexandre 类似的解决方案,但同时打破 dplyr 依赖。如果您打算保留此功能,我认为不必要的依赖不是一个好主意。

test_func <- function(data, by_var_nm) {
by_var_nm <- deparse(substitute(by_var_nm))
tbl_test_sum <- as.data.frame(table(data[[by_var_nm]]))
names(tbl_test_sum) <- c(by_var_nm, "count")
tbl_test_sum
}

速度:

> microbenchmark::microbenchmark(test_func_Alex(iris, Species), test_func_snoram(iris, Species), unit = "relative")
Unit: relative
expr min lq mean median uq max neval cld
test_func_Alex(iris, Species) 6.910679 6.834064 5.827796 5.622154 5.480321 4.009469 100 b
test_func_snoram(iris, Species) 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 100 a

关于r - 在 R 函数中使用 summarize() 进行分组汇总时保留原始变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50700613/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com