In dplyr, there are functions like mutate_at
,
mutate_if
and mutate_all
, as well as summarise_at
,
summarise_if
and summarise_all
. Here we provide a simple way
to do both in all_dt
,at_dt
and if_dt
.
all_dt(data, .func, .funcs, ...) at_dt(data, .at, .func, .funcs, ...) if_dt(data, .if, .func, .funcs, ...)
data | A data.frame |
---|---|
.func | Main function name,either "mutate(_dt)" or "summarise(_dt)" |
.funcs | Function to be run within each column, should return a value or vectors with same length. |
... | Parameters to be passed to parameter *.funcs*. |
.at | Variables to select, could use regular expression or numeric/character vector. |
.if | Conditional function to select columns. When starts with `-`(minus symbol), return the negative columns. |
A data.table
Always return the columns with their original names after mutate
or
summarise
.
# all_ all_dt(iris[,-5],mutate_dt,scale)#> Sepal.Length Sepal.Width Petal.Length Petal.Width #> <num> <num> <num> <num> #> 1: -0.89767388 1.01560199 -1.3357516 -1.3110521 #> 2: -1.13920048 -0.13153881 -1.3357516 -1.3110521 #> 3: -1.38072709 0.32731751 -1.3923993 -1.3110521 #> 4: -1.50149039 0.09788935 -1.2791040 -1.3110521 #> 5: -1.01843718 1.24503015 -1.3357516 -1.3110521 #> --- #> 146: 1.03453895 -0.13153881 0.8168591 1.4439941 #> 147: 0.55148575 -1.27867961 0.7035638 0.9192234 #> 148: 0.79301235 -0.13153881 0.8168591 1.0504160 #> 149: 0.43072244 0.78617383 0.9301544 1.4439941 #> 150: 0.06843254 -0.13153881 0.7602115 0.7880307all_dt(iris[,-5],mutate,scale)#> Sepal.Length Sepal.Width Petal.Length Petal.Width #> <num> <num> <num> <num> #> 1: -0.89767388 1.01560199 -1.3357516 -1.3110521 #> 2: -1.13920048 -0.13153881 -1.3357516 -1.3110521 #> 3: -1.38072709 0.32731751 -1.3923993 -1.3110521 #> 4: -1.50149039 0.09788935 -1.2791040 -1.3110521 #> 5: -1.01843718 1.24503015 -1.3357516 -1.3110521 #> --- #> 146: 1.03453895 -0.13153881 0.8168591 1.4439941 #> 147: 0.55148575 -1.27867961 0.7035638 0.9192234 #> 148: 0.79301235 -0.13153881 0.8168591 1.0504160 #> 149: 0.43072244 0.78617383 0.9301544 1.4439941 #> 150: 0.06843254 -0.13153881 0.7602115 0.7880307all_dt(iris[,-5],summarise,max)#> Sepal.Length Sepal.Width Petal.Length Petal.Width #> <num> <num> <num> <num> #> 1: 7.9 4.4 6.9 2.5all_dt(iris[,-5],summarise,min)#> Sepal.Length Sepal.Width Petal.Length Petal.Width #> <num> <num> <num> <num> #> 1: 4.3 2 1 0.1# at_ iris %>% at_dt("Se",mutate,scale)#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> <num> <num> <num> <num> <fctr> #> 1: -0.89767388 1.01560199 1.4 0.2 setosa #> 2: -1.13920048 -0.13153881 1.4 0.2 setosa #> 3: -1.38072709 0.32731751 1.3 0.2 setosa #> 4: -1.50149039 0.09788935 1.5 0.2 setosa #> 5: -1.01843718 1.24503015 1.4 0.2 setosa #> --- #> 146: 1.03453895 -0.13153881 5.2 2.3 virginica #> 147: 0.55148575 -1.27867961 5.0 1.9 virginica #> 148: 0.79301235 -0.13153881 5.2 2.0 virginica #> 149: 0.43072244 0.78617383 5.4 2.3 virginica #> 150: 0.06843254 -0.13153881 5.1 1.8 virginicairis %>% at_dt(1:3,mutate,scale)#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> <num> <num> <num> <num> <fctr> #> 1: -0.89767388 1.01560199 -1.3357516 0.2 setosa #> 2: -1.13920048 -0.13153881 -1.3357516 0.2 setosa #> 3: -1.38072709 0.32731751 -1.3923993 0.2 setosa #> 4: -1.50149039 0.09788935 -1.2791040 0.2 setosa #> 5: -1.01843718 1.24503015 -1.3357516 0.2 setosa #> --- #> 146: 1.03453895 -0.13153881 0.8168591 2.3 virginica #> 147: 0.55148575 -1.27867961 0.7035638 1.9 virginica #> 148: 0.79301235 -0.13153881 0.8168591 2.0 virginica #> 149: 0.43072244 0.78617383 0.9301544 2.3 virginica #> 150: 0.06843254 -0.13153881 0.7602115 1.8 virginica#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> <num> <num> <num> <num> <fctr> #> 1: 5.1 3.5 0.3362663 0.2 setosa #> 2: 4.9 3.0 0.3362663 0.2 setosa #> 3: 4.7 3.2 0.3122473 0.2 setosa #> 4: 4.6 3.1 0.3602853 0.2 setosa #> 5: 5.0 3.6 0.3362663 0.2 setosa #> --- #> 146: 6.7 3.0 1.2489891 2.3 virginica #> 147: 6.3 2.5 1.2009511 1.9 virginica #> 148: 6.5 3.0 1.2489891 2.0 virginica #> 149: 6.2 3.4 1.2970272 2.3 virginica #> 150: 5.9 3.0 1.2249701 1.8 virginica# if_ iris %>% if_dt(is.double,mutate_dt,scale,center = FALSE)#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> <num> <num> <num> <num> <fctr> #> 1: 0.8613268 1.1296201 0.3362663 0.140405 setosa #> 2: 0.8275493 0.9682458 0.3362663 0.140405 setosa #> 3: 0.7937718 1.0327956 0.3122473 0.140405 setosa #> 4: 0.7768830 1.0005207 0.3602853 0.140405 setosa #> 5: 0.8444380 1.1618950 0.3362663 0.140405 setosa #> --- #> 146: 1.1315470 0.9682458 1.2489891 1.614657 virginica #> 147: 1.0639919 0.8068715 1.2009511 1.333847 virginica #> 148: 1.0977695 0.9682458 1.2489891 1.404050 virginica #> 149: 1.0471032 1.0973453 1.2970272 1.614657 virginica #> 150: 0.9964369 0.9682458 1.2249701 1.263645 virginica## support minus symbol to select negative conditions iris %>% if_dt(-is.factor,mutate_dt,scale,center = FALSE)#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> <num> <num> <num> <num> <fctr> #> 1: 0.8613268 1.1296201 0.3362663 0.140405 setosa #> 2: 0.8275493 0.9682458 0.3362663 0.140405 setosa #> 3: 0.7937718 1.0327956 0.3122473 0.140405 setosa #> 4: 0.7768830 1.0005207 0.3602853 0.140405 setosa #> 5: 0.8444380 1.1618950 0.3362663 0.140405 setosa #> --- #> 146: 1.1315470 0.9682458 1.2489891 1.614657 virginica #> 147: 1.0639919 0.8068715 1.2009511 1.333847 virginica #> 148: 1.0977695 0.9682458 1.2489891 1.404050 virginica #> 149: 1.0471032 1.0973453 1.2970272 1.614657 virginica #> 150: 0.9964369 0.9682458 1.2249701 1.263645 virginicairis %>% if_dt(is.factor,mutate,as.character)#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species #> <num> <num> <num> <num> <char> #> 1: 5.1 3.5 1.4 0.2 setosa #> 2: 4.9 3.0 1.4 0.2 setosa #> 3: 4.7 3.2 1.3 0.2 setosa #> 4: 4.6 3.1 1.5 0.2 setosa #> 5: 5.0 3.6 1.4 0.2 setosa #> --- #> 146: 6.7 3.0 5.2 2.3 virginica #> 147: 6.3 2.5 5.0 1.9 virginica #> 148: 6.5 3.0 5.2 2.0 virginica #> 149: 6.2 3.4 5.4 2.3 virginica #> 150: 5.9 3.0 5.1 1.8 virginicairis %>% if_dt(is.numeric,summarise,max,na.rm = TRUE)#> Sepal.Length Sepal.Width Petal.Length Petal.Width #> <num> <num> <num> <num> #> 1: 7.9 4.4 6.9 2.5