Как использовать mutate_if с функцией

голоса
1

Я хочу , чтобы преобразовать dataframe 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
Задан 07/11/2018 в 19:56
источник пользователем
На других языках...                            


1 ответов

голоса
4

Это может быть сделано с 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(.))))
Ответил 07/11/2018 в 20:03
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more