此函数允许您对多个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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。