Вы можете выбрать mutate_at
:
library(dplyr)
df %>%
mutate_at(vars(starts_with("W")), funs(ifelse(. < CP, 0, .)))
Вывод:
CP W1 W2 W3 W4
1 50 0 60 0 0
2 10 0 0 0 0
3 50 0 0 0 50
4 10 0 0 0 21
5 10 0 31 0 0
Обратите внимание, что starts_with
будет соответствовать любому имени столбца, которое начинается с W
.
Если это проблема (например, если у вас есть другие столбцы с этим шаблоном, которые вы не хотите рассматривать), вы также можете использовать matches
с регулярным выражением, которое будет учитывать только те W
, которые являютсяс последующим номером:
df %>%
mutate_at(vars(matches("^W[0-9]+")), funs(ifelse(. < CP, 0, .)))