将dplyr :: mutate_at与case_当以另一个变量为条件时

问题描述 投票:0回答:1

我想根据条件对一组变量进行不同的转换。我找到了解决方法here

示例:如果'gear'等于4,我想将所有变量'mpg'减去4到'disp',否则我要减去3。

mtcars %>% 
  mutate_at(vars(mpg:disp),
            funs(case_when(gear == 4 ~ . - 4L, TRUE ~ . -3L))) 

但我收到此警告:

funs() is soft deprecated as of dplyr 0.8.0
Please use a list of either functions or lambdas: 

# Simple named list: 
`list(mean = mean, median = median)`
# Auto named with `tibble::lst()`: 
`tibble::lst(mean, median)`
# Using lambdas
`list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))`

This warning is displayed once per session.  

是否有更好的解决方案,可以避免使用funs()

r dplyr tidyverse lifecycle
1个回答
0
投票

复制这样做

mtcars %>% mutate_at(vars(mpg:disp), ~ case_when(gear == 4 ~ . - 4L, TRUE ~ . -3L)) 
© www.soinside.com 2019 - 2024. All rights reserved.