作用域動詞( _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 的術語,並且已棄用。
對變量進行分組
如果應用於分組的 tibble,則這些操作不會應用於分組變量。該行為取決於選擇是隱式的(all
和 if
選擇)還是顯式的(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 dplyr summarise 將每組匯總為一行
- R dplyr slice 使用行的位置對行進行子集化
- R dplyr sample_n 從表中采樣 n 行
- R dplyr starwars 星球大戰人物
- R dplyr storms 風暴追蹤數據
- R dplyr select_all 選擇並重命名一組變量
- R dplyr select 使用列的名稱和類型保留或刪除列
- R dplyr setops 設置操作
- R dplyr group_trim 修剪分組結構
- R dplyr copy_to 將本地數據幀複製到遠程src
- R dplyr consecutive_id 為連續組合生成唯一標識符
- R dplyr row_number 整數排名函數
- R dplyr band_members 樂隊成員
- R dplyr mutate-joins 變異連接
- R dplyr nth 從向量中提取第一個、最後一個或第 n 個值
- R dplyr coalesce 找到第一個非缺失元素
- R dplyr group_split 按組分割 DataFrame
- R dplyr mutate 創建、修改和刪除列
- R dplyr order_by 用於排序窗口函數輸出的輔助函數
- R dplyr context 有關“當前”組或變量的信息
- R dplyr percent_rank 比例排名函數
- R dplyr recode 重新編碼值
- R dplyr desc 降序
- R dplyr between 檢測值落在指定範圍內的位置
- R dplyr cumall 任何、全部和平均值的累積版本
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Summarise multiple columns。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。