Как использовать mutate_if с функцией - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу преобразовать фрейм данных d в приведенный ниже результат (result), используя функцию replace_by_sym. Что я делаю не так?

library(tidyverse)

d <- data.frame(dir = c(-1,1,-1,1,1), a = rep(100,5), b = 105:109, c = 108:112)

replace_by_sym <- function(x){
  x <- x * (-1) + 200
}

d %>%
  mutate_if(dir=-1, vars(a:c),
            funs(replace_by_sym(.))) -> result

для получения

   dir   a   b   c
1  -1   100  95  92
2   1   100 106 109
3  -1   100  93  90
4   1   100 108 111
5   1   100 109 112

1 Ответ

0 голосов
/ 07 ноября 2018

Это можно сделать с помощью ifelse

d %>% 
  mutate_at(vars(a:c), funs( ifelse (dir == -1, (dir * .)  + 200, .)))
#   dir   a   b   c
#1  -1 100  95  92
#2   1 100 106 109
#3  -1 100  93  90
#4   1 100 108 111
#5   1 100 109 112

Или с case_when

d %>% 
   mutate_at(vars(a:c), funs(case_when(dir == -1 ~ (dir * .) + 200, 
                                       TRUE ~ as.numeric(.))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...