gpt4 book ai didi

r - 在多个变量上应用命令时缩短 case_when 语法

转载 作者:行者123 更新时间:2023-12-04 09:31:39 25 4
gpt4 key购买 nike

假设我们正在使用 mtcars 数据集,并希望在特定时间间隔内基于另一个数据集创建一个变量,我可以使用 between 命令和 case_when:

library(tidyverse)
test <- mtcars %>%
mutate(new_var = case_when(
between(cyl, 0, 170)~ cyl,
TRUE ~ NA_real_)
)

但是,如果我们在相同的时间间隔内同时查看多个变量(比如 30+),有没有办法缩短这个时间。例如,这里只取 5 个变量:

test <- mtcars %>% 
mutate(new_var = case_when(
between(cyl, 0, 170) &
between(disp, 0, 170) &
between(hp, 0, 170) &
between(drat, 0, 170) &
between(wt, 0, 170) ~ cyl,
TRUE ~ NA_real_)
)

我认为可以使用 all 命令并通过 %in% 传递变量向量,但想不出办法。有人有什么建议吗?

最佳答案

一种选择是使用 mutate_at 创建逻辑列,然后将 reduce 转换为单个逻辑 vector 以传递到 case_when

library(tidyverse)
test1 <- mtcars %>%
mutate_at(vars(cyl:wt), list(new= ~ between(., 0, 170))) %>%
mutate(new_var = case_when(reduce(select(.,ends_with('new')), `&`)
~ cyl, TRUE ~ NA_real_)) %>%
select(-ends_with('new'))
all.equal(test, test1)
#[1] TRUE

另一个选项是 map

mtcars %>%
select(cyl:wt) %>%
map(~ between(.x, 0, 170)) %>%
reduce(`&`) %>%
bind_cols(mtcars, new_var = .) %>%
mutate(new_var = case_when(new_var ~ cyl, TRUE ~ NA_real_))

关于r - 在多个变量上应用命令时缩短 case_when 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57761843/

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