简体   繁体   English

使用 dplyr::mutate_at 和 case_when 以另一个变量为条件

[英]Using dplyr::mutate_at with case_when conditional on another variable

I want to transform a set of variables differently depending on a condition.我想根据条件以不同的方式转换一组变量。 I found a solution here我在这里找到了解决方案

Example: I want to substract 4 from all variables 'mpg' to 'disp' if 'gear' equals 4, otherwise I substract 3.示例:如果 'gear' 等于 4,我想从所有变量 'mpg' 中减去 4 到 'disp',否则我减去 3。

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

But I get this warning:但我收到这个警告:

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.  

Is there a better solution to my problem that avoids using funs() ?是否有更好的解决方案可以避免使用funs()来解决我的问题?

重现这样做

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM