當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R dplyr summarise_all 匯總多列


[Superseded]

作用域動詞( _if_at_all )已被現有動詞中的 pick()across() 取代。有關詳細信息,請參閱vignette("colwise")

summarise()scoped 變體可以輕鬆地將相同的轉換應用於多個變量。有三種變體。

  • summarise_all() 影響每個變量

  • summarise_at() 影響使用字符向量或 vars() 選擇的變量

  • summarise_if() 影響使用謂詞函數選擇的變量

用法

summarise_all(.tbl, .funs, ...)

summarise_if(.tbl, .predicate, .funs, ...)

summarise_at(.tbl, .vars, .funs, ..., .cols = NULL)

summarize_all(.tbl, .funs, ...)

summarize_if(.tbl, .predicate, .funs, ...)

summarize_at(.tbl, .vars, .funs, ..., .cols = NULL)

參數

.tbl

tbl 對象。

.funs

函數 fun 、 quosure 樣式 lambda ~ fun(.) 或任一形式的列表。

...

.funs 中函數調用的附加參數。這些僅在 tidy dots 支持下評估一次。

.predicate

應用於列或邏輯向量的謂詞函數。選擇.predicate 為或返回TRUE 的變量。該參數傳遞給rlang::as_function(),因此支持quosure-style lambda 函數和表示函數名稱的字符串。

.vars

vars() 生成的列列表、列名稱的字符向量、列位置的數值向量或 NULL

.cols

此參數已重命名為 .vars 以符合 dplyr 的術語,並且已棄用。

一個 DataFrame 。默認情況下,新創建的列具有唯一標識輸出所需的最短名稱。要強製包含名稱(即使不需要),請為輸入命名(有關詳細信息,請參閱示例)。

對變量進行分組

如果應用於分組的 tibble,則這些操作不會應用於分組變量。該行為取決於選擇是隱式的(allif 選擇)還是顯式的(at 選擇)。

  • summarise_at() 中的顯式選擇所覆蓋的變量進行分組始終是一個錯誤。將 -group_cols() 添加到 vars() 選擇中以避免出現這種情況:

    data %>%
      summarise_at(vars(-group_cols(), ...), myoperation)

    或者從列名的字符向量中刪除group_vars()

    nms <- setdiff(nms, group_vars(data))
    data %>% summarise_at(nms, myoperation)
  • summarise_all()summarise_if() 會默默地忽略隱式選擇所涵蓋的分組變量。

命名

新列的名稱源自輸入變量的名稱和函數的名稱。

  • 如果隻有一個未命名函數(即,如果 .funs 是長度為 1 的未命名列表),則使用輸入變量的名稱來命名新列;

  • 對於 _at 函數,如果隻有一個未命名變量(即,如果 .vars 的形式為 vars(a_single_column) )並且 .funs 的長度大於 1,則使用函數的名稱來命名新列;

  • 否則,通過連接輸入變量的名稱和函數的名稱來創建新名稱,並用下劃線 "_" 分隔。

.funs 參數可以是命名或未命名列表。如果函數未命名並且無法自動派生名稱,則使用 "fn#" 形式的名稱。同樣,vars() 接受命名和未命名參數。如果 .vars 中的變量被命名,則會創建一個具有該名稱的新列。

新列中的名稱衝突使用唯一的後綴消除歧義。

也可以看看

例子

# The _at() variants directly support strings:
starwars %>%
  summarise_at(c("height", "mass"), mean, na.rm = TRUE)
#> # A tibble: 1 × 2
#>   height  mass
#>    <dbl> <dbl>
#> 1   174.  97.3
# ->
starwars %>% summarise(across(c("height", "mass"), ~ mean(.x, na.rm = TRUE)))
#> # A tibble: 1 × 2
#>   height  mass
#>    <dbl> <dbl>
#> 1   174.  97.3

# You can also supply selection helpers to _at() functions but you have
# to quote them with vars():
starwars %>%
  summarise_at(vars(height:mass), mean, na.rm = TRUE)
#> # A tibble: 1 × 2
#>   height  mass
#>    <dbl> <dbl>
#> 1   174.  97.3
# ->
starwars %>%
  summarise(across(height:mass, ~ mean(.x, na.rm = TRUE)))
#> # A tibble: 1 × 2
#>   height  mass
#>    <dbl> <dbl>
#> 1   174.  97.3

# The _if() variants apply a predicate function (a function that
# returns TRUE or FALSE) to determine the relevant subset of
# columns. Here we apply mean() to the numeric columns:
starwars %>%
  summarise_if(is.numeric, mean, na.rm = TRUE)
#> # A tibble: 1 × 3
#>   height  mass birth_year
#>    <dbl> <dbl>      <dbl>
#> 1   174.  97.3       87.6
starwars %>%
  summarise(across(where(is.numeric), ~ mean(.x, na.rm = TRUE)))
#> # A tibble: 1 × 3
#>   height  mass birth_year
#>    <dbl> <dbl>      <dbl>
#> 1   174.  97.3       87.6

by_species <- iris %>%
  group_by(Species)

# If you want to apply multiple transformations, pass a list of
# functions. When there are multiple functions, they create new
# variables instead of modifying the variables in place:
by_species %>%
  summarise_all(list(min, max))
#> # A tibble: 3 × 9
#>   Species    Sepal.Length_fn1 Sepal.Width_fn1 Petal.Length_fn1
#>   <fct>                 <dbl>           <dbl>            <dbl>
#> 1 setosa                  4.3             2.3              1  
#> 2 versicolor              4.9             2                3  
#> 3 virginica               4.9             2.2              4.5
#> # ℹ 5 more variables: Petal.Width_fn1 <dbl>, Sepal.Length_fn2 <dbl>,
#> #   Sepal.Width_fn2 <dbl>, Petal.Length_fn2 <dbl>, Petal.Width_fn2 <dbl>
# ->
by_species %>%
  summarise(across(everything(), list(min = min, max = max)))
#> # A tibble: 3 × 9
#>   Species    Sepal.Length_min Sepal.Length_max Sepal.Width_min
#>   <fct>                 <dbl>            <dbl>           <dbl>
#> 1 setosa                  4.3              5.8             2.3
#> 2 versicolor              4.9              7               2  
#> 3 virginica               4.9              7.9             2.2
#> # ℹ 5 more variables: Sepal.Width_max <dbl>, Petal.Length_min <dbl>,
#> #   Petal.Length_max <dbl>, Petal.Width_min <dbl>, Petal.Width_max <dbl>
源代碼:R/colwise-mutate.R

相關用法


注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Summarise multiple columns。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。