Используя новую грамматику в 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
Любая помощь приветствуется!