根据一列中的文本,我想要给另外两列分别赋值一个字符和一个整数。多个case_when条件(左侧)用于给一个列赋字符值,给另一个列赋整数值,但结果(右侧)不同。我使用exprs
和!!!
是因为我只想在一个表中维护表达式列表的基础。
我的代码如下:
library(rlang)
library(tidyverse)
df <- data.frame(a=c("text-1" , "text_2", "text3"))
e1 <-
exprs(
grepl("text-", a) ~ "a",
grepl("text_", a) ~ "b",
grepl("text[0-9]", a) ~ "c"
)
e2 <-
exprs(
grepl("text-", a) ~ 0,
grepl("text_", a) ~ 1,
grepl("text[0-9]", a) ~ 2
)
test <- df %>% mutate(b=case_when(!!!e1),
c=case_when(!!!e2)
)
预期结果是:
> test
a b c
1 text-1 a 0
2 text_2 b 1
3 text3 c 2
但如果有数百万条记录,使用两个具有相同LHS的case_when表达式列表似乎是冗余和低效的。 有什么方法可以更有效地达到相同的结果?
case_when
吗?但是如果你的 LHS 完全相同,那么如何评估不同的 RHS 呢? - Ronak Shahletters[c(0, 1, 2) + 1]
将c(0, 1, 2)
映射到c(a, b, c)
,这可用于替换其中一个case_when
表达式。 - Joris C.