Если утверждение верно, то измените несколько столбцов - PullRequest
2 голосов
/ 27 марта 2020

Я хотел бы сделать несколько действий в трубе dplyr, когда какое-либо утверждение истинно.

Для таких данных:

t = tibble(a = 1:3, b = 1:3, c = 1:3, d = 1:3, e = 1:3)

Я хотел бы как-то написать, что если

a == 2

затем

b = b + 2
c = c + 3
d = d + 4
e = e + 5

В принципе, я не хочу повторять условие if несколько раз, потому что если оно изменилось, мне нужно обновить его в нескольких местах, что является ошибкой -prone.

1 Ответ

1 голос
/ 27 марта 2020

Мы можем использовать

library(dplyr)
library(purrr)
map_dfc(2:5, ~ {n <- .x ;
               t %>%
                  transmute_at(vars(.x), ~  case_when(a == 2 ~  . + n, TRUE ~ .))}) %>%
   bind_cols(select(t, a), .)

Если нам нужны другие значения, тогда используйте map2

map2_dfc(2:5, c(2L, 1000L, 1500L, 2000L), ~ {n <- .x
               val <- .y;
              t %>%
                  transmute_at(vars(.x), ~  case_when(a == 2 ~  . + val, TRUE ~ .))}) %>%
   bind_cols(select(t, a), .)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...