dplyr 0.8.0 mutate_at: использование пользовательской функции без перезаписи исходных столбцов - PullRequest
3 голосов
/ 01 апреля 2019

Используя новую грамматику в dplyr 0.8.0, используя list () вместо funs (), я хочу иметь возможность создавать новые переменные из mutate_at () без перезаписи старой. По сути, мне нужно заменить любое число над значением с NA в нескольких столбцах, не перезаписывая столбцы.

Я уже работал с предыдущей версией dplyr, но я хочу учесть изменения в dplyr, чтобы мой код не сломался позже.

Скажи, что у меня есть кусок:

x <- tibble(id = 1:10, x = sample(1:10, 10, replace = TRUE), 
            y = sample(1:10, 10, replace = TRUE))

Я хочу иметь возможность заменить любые значения выше 5 на NA. Раньше я делал это так, и именно этого я и хочу получить:

x %>% mutate_at(vars(x, y), funs(RC = replace(., which(. > 5), NA)))
# A tibble: 10 x 5
      id     x     y  x_RC  y_RC
   <int> <int> <int> <int> <int>
 1     1     2     3     2     3
 2     2     2     1     2     1
 3     3     3     4     3     4
 4     4     4     4     4     4
 5     5     2     9     2    NA
 6     6     6     8    NA    NA
 7     7    10     2    NA     2
 8     8     1     3     1     3
 9     9    10     1    NA     1
10    10     1     8     1    NA

Это то, что я пробовал, но это не работает:

x %>% mutate_at(vars(x, y), list(RC = replace(., which(. > 5), NA)))

Ошибка в [<-.data.frame (*tmp*, список, значение = NA): новые столбцы оставят дыры после существующих столбцов

Это работает, но заменяет исходные переменные:

x %>% mutate_at(vars(x, y), list(~replace(., which(. > 5), NA)))
# A tibble: 10 x 3
      id     x     y
   <int> <int> <int>
 1     1     2     3
 2     2     2     1
 3     3     3     4
 4     4     4     4
 5     5     2    NA
 6     6    NA    NA
 7     7    NA     2
 8     8     1     3
 9     9    NA     1
10    10     1    NA

Любая помощь приветствуется!

1 Ответ

2 голосов
/ 01 апреля 2019

Почти там, просто создайте именованный список.

x %>% mutate_at(vars(x, y), list(RC = ~replace(., which(. > 5), NA)))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...