противоположность mutate_at в dplyr - PullRequest
3 голосов
/ 07 июля 2019

Мне нужна противоположность mutate_at в dplyr. Я хочу выбрать группу столбцов, не указанных в списке переменных.

df <- tibble(var_not_to_be_modified = sample(c("T","F"),10, replace = TRUE),
             var_to_be_modified     = sample(c(1,0)    ,10, replace = TRUE) )

df %>%
mutate_at(c("var_not_to_be_modified"), as.numeric)

Результатом будет изменение var_to_be_modified на dbl.

Ответы [ 2 ]

2 голосов
/ 07 июля 2019

Превращение комментария @ Axeman в ответ от вики сообщества:

library(dplyr)
df %>%
  mutate_at(., vars(-var_not_to_be_modified), as.numeric)
 # A tibble: 10 x 2
#   var_not_to_be_modified var_to_be_modified
#   <chr>                               <dbl>
# 1 F                                       1
# 2 F                                       1
# 3 F                                       1
# 4 F                                       1
# 5 F                                       1
# 6 T                                       0
# 7 T                                       1
# 8 F                                       1
# 9 F                                       0
#10 T                                       1

Со страницы справки vars:

Аргументы

... Переменные для включения / исключения в мутировании / суммировании. Вы можете использовать те же характеристики, что и в select (). Если отсутствует, по умолчанию используются все не группирующие переменные.

0 голосов
/ 07 июля 2019

Если мы передаем символьный вектор, используйте one_of, который является каноническим способом удаления столбцов

library(dplyr)
df %>%
  mutate_at(vars(-one_of(c("var_not_to_be_modified"))), as.numeric)
# A tibble: 10 x 2
#   var_not_to_be_modified var_to_be_modified
#   <chr>                               <dbl>
# 1 F                                       1
# 2 F                                       1
# 3 T                                       1
# 4 F                                       0
# 5 T                                       0
# 6 F                                       1
# 7 T                                       1
# 8 T                                       1
# 9 F                                       0
#10 T                                       1

Согласно ?select_helpers

one_of (): сопоставляет имена переменных в символьном векторе.


Если мы передадим имя столбца, которого нет в данных, поведение будет другим. Здесь это не приведет к ошибке

 df %>% 
     mutate_at(vars(-one_of("hello")), as.numeric)

и

df %>%
    mutate_at(vars(-hello), as.numeric)

Ошибка в is_character (x): объект 'hello' не найден

Другими словами, если OP хотел, чтобы весь конвейер заканчивался ошибкой, второй вариант лучше, и если он все еще работает, но с предупреждением, можно использовать параметр в этом посте

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