使用mutate_at对多个变量进行Boxcox转换

时间:2018-11-26 15:13:23

标签: r dplyr transformation r-caret mutate

说,我想对以下数据(不是我正在使用的数据,只是为了解释我的问题)从插入符号包中进行boxcox转换:

library(caret); library(tidyverse)
set.seed(001)
d <- tibble(a = rpois(20, 10), b = rnorm(20, 40, 10))
    head(d)
# A tibble: 6 x 2
      a     b
  <int> <dbl>
1     8  20.1
2    10  46.2
3     7  39.4
4    11  38.4
5    14  25.3
6    12  35.2

我可以通过运行来实现

d1 <- BoxCoxTrans(d$a) %>% predict(d$a)

我可以重复相同的过程来变换b。有没有办法用dplyr同时对变量a和b进行boxcox转换?我尝试了以下操作,但无法弄清楚如何编写.funs

d %>% mutate_at(c("a", "b"), BoxCoxTrans %>% predict(d))

1 个答案:

答案 0 :(得分:1)

我从未使用过插入符号,但是是否有任何原因在您的特定情况下这些解决方案不起作用? (他们对我来说还不错。)

library(tidyverse)
library(caret)
library(e1071)
set.seed(001)
d <- tibble(a = rpois(20, 10), b = rnorm(20, 40, 10))
head(d)

#On selected columns
d %>%
  mutate_at(vars(a,b), funs( BoxCoxTrans(.) %>% predict(.)))

#Or on all columns
d %>%
  mutate_all(funs( BoxCoxTrans(.) %>% predict(.)))