我想使用 case_when
根据两个不同的输入来修改/变异一列数据。其中一个用于创建LHS逻辑,另一个在RHS上对应输入值。下面提供了一个示例。
library(dplyr)
library(purrr)
library(tibble)
df <- tibble(var = paste0(rep("var", 10), 1:10),
label = c("label1", "label2", rep(NA, 7), "label10"))
match_var <- paste0(rep("var", 7), 3:9)
new_labels <- paste0(rep("add_this_label", 7), 3:9)
df %>%
mutate(test = map2(match_var , new_labels,
~case_when(
var == .x ~ .y,
TRUE ~ label
)
))
我认为问题在于,case_when
内的所有内容都被视为表达式,但我并不完全确定。可以手动输入 case_when
中的所有七行,但我的应用程序要求在向量 match_vars
和 new_labels
很长时完成此操作,这使得手动输入 case_when
不可行。
df %>%
mutate(label = case_when(
var == match_var[1] ~ new_labels[1],
var == match_var[2] ~ new_labels[2],
var == match_var[3] ~ new_labels[3],
var == match_var[4] ~ new_labels[4],
var == match_var[5] ~ new_labels[5],
var == match_var[6] ~ new_labels[6],
var == match_var[7] ~ new_labels[7],
TRUE ~ label
))
编辑:可以使用for
循环实现所需的结果,但现在我想知道是否可以使用case_when
和map2_*
函数来实现?
for (i in seq_along(match_var)) {
df$label <- ifelse(df$var == match_var[i], new_labels[i], df$label)
}