簡體   English   中英

如何使 Tidyverse 中的自定義函數更具可讀性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM