此函數允許您對多個switch()
語句進行向量化。按順序評估每種情況,每個元素的第一個匹配確定輸出向量中的相應值。如果沒有大小寫匹配,則使用.default
。
case_match()
是 SQL "simple" CASE WHEN
語句的 R 等效項。
連接至case_when()
case_when()
在公式左側使用邏輯表達式,而 case_match()
使用值與 .x
進行匹配。下麵的兩條語句大致是等價的:
case_when(
x %in% c("a", "b") ~ 1,
x %in% "c" ~ 2,
x %in% c("d", "e") ~ 3
)
case_match(
x,
c("a", "b") ~ 1,
"c" ~ 2,
c("d", "e") ~ 3
)
參數
- .x
-
要匹配的向量。
- ...
-
<
dynamic-dots
> 雙邊公式序列:old_values ~ new_value
。右側 (RHS) 確定與左側 (LHS) 匹配的所有.x
值的輸出值。LHS 必須求值為與
.x
相同類型的向量。它可以是任意長度,允許您將多個.x
值映射到同一 RHS 值。如果某個值在 LHS 中重複,即.x
中的值與多種情況匹配,則使用第一個匹配項。RHS 輸入將被強製為其通用類型。每個 RHS 輸入將為 recycled 到
.x
的大小。 - .default
-
當
.x
中的值與任何 LHS 輸入都不匹配時使用的值。如果是NULL
(默認值),則將使用缺失值。.default
是 recycled 到.x
的大小。 - .ptype
-
聲明所需輸出類型的可選原型。如果未提供,輸出類型將從所有 RHS 輸入和
.default
的通用類型中獲取。
例子
x <- c("a", "b", "a", "d", "b", NA, "c", "e")
# `case_match()` acts like a vectorized `switch()`.
# Unmatched values "fall through" as a missing value.
case_match(
x,
"a" ~ 1,
"b" ~ 2,
"c" ~ 3,
"d" ~ 4
)
#> [1] 1 2 1 4 2 NA 3 NA
# Missing values can be matched exactly, and `.default` can be used to
# control the value used for unmatched values of `.x`
case_match(
x,
"a" ~ 1,
"b" ~ 2,
"c" ~ 3,
"d" ~ 4,
NA ~ 0,
.default = 100
)
#> [1] 1 2 1 4 2 0 3 100
# Input values can be grouped into the same expression to map them to the
# same output value
case_match(
x,
c("a", "b") ~ "low",
c("c", "d", "e") ~ "high"
)
#> [1] "low" "low" "low" "high" "low" NA "high" "high"
# `case_match()` isn't limited to character input:
y <- c(1, 2, 1, 3, 1, NA, 2, 4)
case_match(
y,
c(1, 3) ~ "odd",
c(2, 4) ~ "even",
.default = "missing"
)
#> [1] "odd" "even" "odd" "odd" "odd" "missing" "even"
#> [8] "even"
# Setting `.default` to the original vector is a useful way to replace
# selected values, leaving everything else as is
case_match(y, NA ~ 0, .default = y)
#> [1] 1 2 1 3 1 0 2 4
starwars %>%
mutate(
# Replace missings, but leave everything else alone
hair_color = case_match(hair_color, NA ~ "unknown", .default = hair_color),
# Replace some, but not all, of the species
species = case_match(
species,
"Human" ~ "Humanoid",
"Droid" ~ "Robot",
c("Wookiee", "Ewok") ~ "Hairy",
.default = species
),
.keep = "used"
)
#> # A tibble: 87 × 2
#> hair_color species
#> <chr> <chr>
#> 1 blond Humanoid
#> 2 unknown Robot
#> 3 unknown Robot
#> 4 none Humanoid
#> 5 brown Humanoid
#> 6 brown, grey Humanoid
#> 7 brown Humanoid
#> 8 unknown Robot
#> 9 black Humanoid
#> 10 auburn, white Humanoid
#> # ℹ 77 more rows
相關用法
- R dplyr case_when 通用向量化 if-else
- R dplyr copy_to 將本地數據幀複製到遠程src
- R dplyr consecutive_id 為連續組合生成唯一標識符
- R dplyr coalesce 找到第一個非缺失元素
- R dplyr context 有關“當前”組或變量的信息
- R dplyr cumall 任何、全部和平均值的累積版本
- R dplyr compute 強製計算數據庫查詢
- R dplyr c_across 合並多列的值
- R dplyr cross_join 交叉連接
- R dplyr count 計算每組中的觀察結果
- R dplyr group_trim 修剪分組結構
- R dplyr slice 使用行的位置對行進行子集化
- R dplyr sample_n 從表中采樣 n 行
- R dplyr row_number 整數排名函數
- R dplyr band_members 樂隊成員
- R dplyr mutate-joins 變異連接
- R dplyr nth 從向量中提取第一個、最後一個或第 n 個值
- R dplyr group_split 按組分割 DataFrame
- R dplyr mutate 創建、修改和刪除列
- R dplyr order_by 用於排序窗口函數輸出的輔助函數
- R dplyr percent_rank 比例排名函數
- R dplyr recode 重新編碼值
- R dplyr starwars 星球大戰人物
- R dplyr desc 降序
- R dplyr between 檢測值落在指定範圍內的位置
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 A general vectorised switch()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。