Мы могли бы использовать mutate_at
library(tidyverse)
cars %>%
mutate(km = speed * dist, mt = km/1000) %>%
mutate_at(vars(km, mt), funs(case_when(speed < 20 ~ .*2,
TRUE ~ .)))
Если нам нужно выполнить вычисления с отдельными значениями для каждого столбца, используйте map2
или pmap
out <- cars %>%
mutate(km = speed * dist, mt = km/1000) %>%
select(km, mt) %>%
map2_df(., list(2, 3), ~
case_when(cars$speed < 20 ~ .x * .y, TRUE ~ .x)) %>%
bind_cols(cars, .)
head(out)
# speed dist km mt
#1 4 2 16 0.024
#2 4 10 80 0.120
#3 7 4 56 0.084
#4 7 22 308 0.462
#5 8 16 256 0.384
#6 9 10 180 0.270