gpt4 book ai didi

r - 如何在R中用一个case_when表达式改变两列?

转载 作者:行者123 更新时间:2023-12-04 11:36:15 27 4
gpt4 key购买 nike

根据一列中的文本,我想为另外两列分配一个字符和一个整数。用于将字符分配给一列和整数分配给另一列的多个 case_when 条件 (LHS) 相等,只有结果 (RHS) 不同。我正在使用 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 表达式列表似乎是多余且低效的(有数百万条记录)。我怎样才能更有效地达到相同的结果?

最佳答案

我不清楚这背后的主要动机,但使用@zx8754 的建议我们可以做到

library(dplyr)
library(rlang)

e1 <- exprs(
grepl("text-", a) ~ "a, 0",
grepl("text_", a) ~ "b, 1",
grepl("text[0-9]", a) ~ "c, 2")

df %>%
mutate(b=case_when(!!!e1)) %>%
tidyr::separate(b, into = c("b", "c"), sep = ",", convert = TRUE)

# a b c
#1 text-1 a 0
#2 text_2 b 1
#3 text3 c 2

关于r - 如何在R中用一个case_when表达式改变两列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57655515/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com