объединение mutate_at с case_when - PullRequest
0 голосов
/ 14 мая 2018

Я должен преобразовать следующий код:

labels = 'x'
dataX <- data.frame(x = colors())
special <- sample(colors(),5)
dataX <- dataX %>% mutate("names2" := dplyr::case_when(UQ(sym(labels)) %in% special ~ UQ(sym(labels))))

В некоторый код, который будет работать без :=, так как это дает мне ПРИМЕЧАНИЕ при запуске проверки пакета.

Поэтому я пытаюсь использовать вместо этого mutate_at, но не могу объединить его с case_when:

dataX <- dataX %>% mutate_at(c("names3" = labels) , funs(dplyr::case_when(.) %in% special ~ .))

, что не с:

Error in mutate_impl(.data, dots) : 
  Column `names3` is of unsupported type quoted call

Поэтому мой вопрос.

Пока лучшее, что я придумал, это:

testx <- function(x, special){tmp <- x %in% special; x[!tmp] <- NA; as.character(x)}
dataX <- dataX %>% mutate_at(c("names4" = labels) , funs(testx(., special)))

1 Ответ

0 голосов
/ 14 мая 2018

Это похоже на синтаксическую ошибку для меня. Просто поставьте скобки в нужное место:

dataX %>%
  mutate_at(c("names3" = labels),
            funs(dplyr::case_when(. %in% special ~ .))) %>% 
  filter(!is.na(names3)) 
#>            x     names2     names3
#> 1     grey41     grey41     grey41
#> 2     grey72     grey72     grey72
#> 3     grey89     grey89     grey89
#> 4 mistyrose4 mistyrose4 mistyrose4
#> 5 steelblue2 steelblue2 steelblue2
...