[英]How to make custom function in Tidyverse more readable?
我有一個包含不同變量的data.frame
,需要用不同的度量進行summarised
。
我正在尋找一個易於閱讀的等價物,
baseline_table <- function(data,var) {
data %>%
group_by(Species) %>%
summarise(
!!sym(paste(var, "_mean", sep = "")) := !!sym(var) %>% mean(na.rm = TRUE),
!!sym(paste(var, "_sd", sep = "")) := !!sym(var) %>% sd(na.rm = TRUE)
)
}
iris %>%
baseline_table(var = "Sepal.Length")
您可以使用glue
語法使其更具可讀性。
baseline_table <- function(data, var) {
data %>%
group_by(Species) %>%
summarise(
"{{var}}_mean" := mean({{ var }}, na.rm = TRUE),
"{{var}}_sd" := sd({{ var }}, na.rm = TRUE)
)
}
iris %>%
baseline_table(var = Sepal.Length)
您可以across
-
library(dplyr)
baseline_table <- function(data,var) {
data %>%
group_by(Species) %>%
summarise(across(all_of(var), list(mean = mean, sd = sd)))
}
iris %>% baseline_table(var = "Sepal.Length")
# Species Sepal.Length_mean Sepal.Length_sd
# <fct> <dbl> <dbl>
#1 setosa 5.01 0.352
#2 versicolor 5.94 0.516
#3 virginica 6.59 0.636
使用across
的好處是您可以將其應用於多個列。
iris %>% baseline_table(var = c("Sepal.Length", "Sepal.Width"))
# Species Sepal.Length_mean Sepal.Length_sd Sepal.Width_mean Sepal.Width_sd
# <fct> <dbl> <dbl> <dbl> <dbl>
#1 setosa 5.01 0.352 3.43 0.379
#2 versicolor 5.94 0.516 2.77 0.314
#3 virginica 6.59 0.636 2.97 0.322
如果您想要更多自定義列名,請查看?across
.names
參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.