Splits a data frame or matrix by grouping variables and scales numeric variables within each group.

scaleBy(formula, data = parent.frame(), center = TRUE, scale = TRUE)

scale_by(data, formula, center = TRUE, scale = TRUE)

Arguments

formula

Grouping structure: a formula, character vector, or variables as as.quoted.

data

A data frame or matrix.

center

Logical; if TRUE, center the variables.

scale

Logical; if TRUE, scale the variables.

Value

A list of data frames or matrices (same class as input), one per group.

Author

Søren Højsgaard, sorenh@math.aau.dk

Examples

scale_by(iris, ~Species)
#> $setosa
#>    Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 1    0.26667447  0.18994136   -0.3570112  -0.4364923
#> 2   -0.30071802 -1.12909583   -0.3570112  -0.4364923
#> 3   -0.86811050 -0.60148096   -0.9328358  -0.4364923
#> 4   -1.15180675 -0.86528840    0.2188133  -0.4364923
#> 5   -0.01702177  0.45374879   -0.3570112  -0.4364923
#> 6    1.11776320  1.24517111    1.3704625   1.4613004
#> 7   -1.15180675 -0.07386608   -0.3570112   0.5124040
#> 8   -0.01702177 -0.07386608    0.2188133  -0.4364923
#> 9   -1.71919923 -1.39290327   -0.3570112  -0.4364923
#> 10  -0.30071802 -0.86528840    0.2188133  -1.3853887
#> 11   1.11776320  0.71755623    0.2188133  -0.4364923
#> 12  -0.58441426 -0.07386608    0.7946379  -0.4364923
#> 13  -0.58441426 -1.12909583   -0.3570112  -1.3853887
#> 14  -2.00289548 -1.12909583   -2.0844850  -1.3853887
#> 15   2.25254817  1.50897854   -1.5086604  -0.4364923
#> 16   1.96885193  2.56420830    0.2188133   1.4613004
#> 17   1.11776320  1.24517111   -0.9328358   1.4613004
#> 18   0.26667447  0.18994136   -0.3570112   0.5124040
#> 19   1.96885193  0.98136367    1.3704625   0.5124040
#> 20   0.26667447  0.98136367    0.2188133   0.5124040
#> 21   1.11776320 -0.07386608    1.3704625  -0.4364923
#> 22   0.26667447  0.71755623    0.2188133   1.4613004
#> 23  -1.15180675  0.45374879   -2.6603096  -0.4364923
#> 24   0.26667447 -0.33767352    1.3704625   2.4101967
#> 25  -0.58441426 -0.07386608    2.5221117  -0.4364923
#> 26  -0.01702177 -1.12909583    0.7946379  -0.4364923
#> 27  -0.01702177 -0.07386608    0.7946379   1.4613004
#> 28   0.55037071  0.18994136    0.2188133  -0.4364923
#> 29   0.55037071 -0.07386608   -0.3570112  -0.4364923
#> 30  -0.86811050 -0.60148096    0.7946379  -0.4364923
#> 31  -0.58441426 -0.86528840    0.7946379  -0.4364923
#> 32   1.11776320 -0.07386608    0.2188133   1.4613004
#> 33   0.55037071  1.77278598    0.2188133  -1.3853887
#> 34   1.40145944  2.03659342   -0.3570112  -0.4364923
#> 35  -0.30071802 -0.86528840    0.2188133  -0.4364923
#> 36  -0.01702177 -0.60148096   -1.5086604  -0.4364923
#> 37   1.40145944  0.18994136   -0.9328358  -0.4364923
#> 38  -0.30071802  0.45374879   -0.3570112  -1.3853887
#> 39  -1.71919923 -1.12909583   -0.9328358  -0.4364923
#> 40   0.26667447 -0.07386608    0.2188133  -0.4364923
#> 41  -0.01702177  0.18994136   -0.9328358   0.5124040
#> 42  -1.43550299 -2.97574790   -0.9328358   0.5124040
#> 43  -1.71919923 -0.60148096   -0.9328358  -0.4364923
#> 44  -0.01702177  0.18994136    0.7946379   3.3590930
#> 45   0.26667447  0.98136367    2.5221117   1.4613004
#> 46  -0.58441426 -1.12909583   -0.3570112   0.5124040
#> 47   0.26667447  0.98136367    0.7946379  -0.4364923
#> 48  -1.15180675 -0.60148096   -0.3570112  -0.4364923
#> 49   0.83406695  0.71755623    0.2188133  -0.4364923
#> 50  -0.01702177 -0.33767352   -0.3570112  -0.4364923
#> 
#> $versicolor
#>     Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 51    2.06133180  1.37030688   0.93634757   0.3742048
#> 52    0.89892665  1.37030688   0.51073504   0.8798869
#> 53    1.86759761  1.05163086   1.36196010   0.8798869
#> 54   -0.84468108 -1.49777728  -0.55329629  -0.1314774
#> 55    1.09266084  0.09560281   0.72354130   0.8798869
#> 56   -0.45721269  0.09560281   0.51073504  -0.1314774
#> 57    0.70519246  1.68898289   0.93634757   1.3855691
#> 58   -2.00708623 -1.17910126  -2.04294015  -1.6485238
#> 59    1.28639503  0.41427882   0.72354130  -0.1314774
#> 60   -1.42588365 -0.22307321  -0.76610255   0.3742048
#> 61   -1.81335204 -2.45380533  -1.61732761  -1.6485238
#> 62   -0.06974431  0.73295484  -0.12768376   0.8798869
#> 63    0.12398988 -1.81645330  -0.55329629  -1.6485238
#> 64    0.31772407  0.41427882   0.93634757   0.3742048
#> 65   -0.65094688  0.41427882  -1.40452135  -0.1314774
#> 66    1.48012923  1.05163086   0.29792877   0.3742048
#> 67   -0.65094688  0.73295484   0.51073504   0.8798869
#> 68   -0.26347850 -0.22307321  -0.34049002  -1.6485238
#> 69    0.51145827 -1.81645330   0.51073504   0.8798869
#> 70   -0.65094688 -0.86042525  -0.76610255  -1.1428417
#> 71   -0.06974431  1.37030688   1.14915383   2.3969334
#> 72    0.31772407  0.09560281  -0.55329629  -0.1314774
#> 73    0.70519246 -0.86042525   1.36196010   0.8798869
#> 74    0.31772407  0.09560281   0.93634757  -0.6371595
#> 75    0.89892665  0.41427882   0.08512251  -0.1314774
#> 76    1.28639503  0.73295484   0.29792877   0.3742048
#> 77    1.67386342  0.09560281   1.14915383   0.3742048
#> 78    1.48012923  0.73295484   1.57476636   1.8912512
#> 79    0.12398988  0.41427882   0.51073504   0.8798869
#> 80   -0.45721269 -0.54174923  -1.61732761  -1.6485238
#> 81   -0.84468108 -1.17910126  -0.97890882  -1.1428417
#> 82   -0.84468108 -1.17910126  -1.19171508  -1.6485238
#> 83   -0.26347850 -0.22307321  -0.76610255  -0.6371595
#> 84    0.12398988 -0.22307321   1.78757263   1.3855691
#> 85   -1.03841527  0.73295484   0.51073504   0.8798869
#> 86    0.12398988  2.00765891   0.51073504   1.3855691
#> 87    1.48012923  1.05163086   0.93634757   0.8798869
#> 88    0.70519246 -1.49777728   0.29792877  -0.1314774
#> 89   -0.65094688  0.73295484  -0.34049002  -0.1314774
#> 90   -0.84468108 -0.86042525  -0.55329629  -0.1314774
#> 91   -0.84468108 -0.54174923   0.29792877  -0.6371595
#> 92    0.31772407  0.73295484   0.72354130   0.3742048
#> 93   -0.26347850 -0.54174923  -0.55329629  -0.6371595
#> 94   -1.81335204 -1.49777728  -2.04294015  -1.6485238
#> 95   -0.65094688 -0.22307321  -0.12768376  -0.1314774
#> 96   -0.45721269  0.73295484  -0.12768376  -0.6371595
#> 97   -0.45721269  0.41427882  -0.12768376  -0.1314774
#> 98    0.51145827  0.41427882   0.08512251  -0.1314774
#> 99   -1.61961784 -0.86042525  -2.68135894  -1.1428417
#> 100  -0.45721269  0.09560281  -0.34049002  -0.1314774
#> 
#> $virginica
#>     Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 101   -0.4529159   1.0108633   0.81174906  1.72583253
#> 102   -1.2392283  -0.8496213  -0.81899682 -0.45876561
#> 103    0.8051839   0.0806210   0.63055507  0.26943377
#> 104   -0.4529159  -0.2294598   0.08697311 -0.82286530
#> 105   -0.1383910   0.0806210   0.44936109  0.63353346
#> 106    1.5914963   0.0806210   1.89891298  0.26943377
#> 107   -2.6545906  -1.4697828  -1.90616074 -1.18696499
#> 108    1.1197088  -0.2294598   1.35533102 -0.82286530
#> 109    0.1761340  -1.4697828   0.44936109 -0.82286530
#> 110    0.9624464   1.9411055   0.99294305  1.72583253
#> 111   -0.1383910   0.7007825  -0.81899682 -0.09466592
#> 112   -0.2956535  -0.8496213  -0.45660885 -0.45876561
#> 113    0.3333965   0.0806210  -0.09422087  0.26943377
#> 114   -1.3964908  -1.4697828  -1.00019081 -0.09466592
#> 115   -1.2392283  -0.5395405  -0.81899682  1.36173284
#> 116   -0.2956535   0.7007825  -0.45660885  0.99763315
#> 117   -0.1383910   0.0806210  -0.09422087 -0.82286530
#> 118    1.7487587   2.5612670   2.08010696  0.63353346
#> 119    1.7487587  -1.1597020   2.44249494  0.99763315
#> 120   -0.9247034  -2.4000250  -1.00019081 -1.91516437
#> 121    0.4906589   0.7007825   0.26816710  0.99763315
#> 122   -1.5537533  -0.5395405  -1.18138479 -0.09466592
#> 123    1.7487587  -0.5395405   2.08010696 -0.09466592
#> 124   -0.4529159  -0.8496213  -1.18138479 -0.82286530
#> 125    0.1761340   1.0108633   0.26816710  0.26943377
#> 126    0.9624464   0.7007825   0.81174906 -0.82286530
#> 127   -0.6101784  -0.5395405  -1.36257878 -0.82286530
#> 128   -0.7674409   0.0806210  -1.18138479 -0.82286530
#> 129   -0.2956535  -0.5395405   0.08697311  0.26943377
#> 130    0.9624464   0.0806210   0.44936109 -1.55106468
#> 131    1.2769713  -0.5395405   0.99294305 -0.45876561
#> 132    2.0632837   2.5612670   1.53652500 -0.09466592
#> 133   -0.2956535  -0.5395405   0.08697311  0.63353346
#> 134   -0.4529159  -0.5395405  -0.81899682 -1.91516437
#> 135   -0.7674409  -1.1597020   0.08697311 -2.27926406
#> 136    1.7487587   0.0806210   0.99294305  0.99763315
#> 137   -0.4529159   1.3209440   0.08697311  1.36173284
#> 138   -0.2956535   0.3907017  -0.09422087 -0.82286530
#> 139   -0.9247034   0.0806210  -1.36257878 -0.82286530
#> 140    0.4906589   0.3907017  -0.27541486  0.26943377
#> 141    0.1761340   0.3907017   0.08697311  1.36173284
#> 142    0.4906589   0.3907017  -0.81899682  0.99763315
#> 143   -1.2392283  -0.8496213  -0.81899682 -0.45876561
#> 144    0.3333965   0.7007825   0.63055507  0.99763315
#> 145    0.1761340   1.0108633   0.26816710  1.72583253
#> 146    0.1761340   0.0806210  -0.63780283  0.99763315
#> 147   -0.4529159  -1.4697828  -1.00019081 -0.45876561
#> 148   -0.1383910   0.0806210  -0.63780283 -0.09466592
#> 149   -0.6101784   1.3209440  -0.27541486  0.99763315
#> 150   -1.0819658   0.0806210  -0.81899682 -0.82286530
#> 
scale_by(iris, ~1)
#> $<NA>
#> NULL
#> 

## Combine result into one data frame:
a <- scale_by(iris, ~Species)
d <- do.call(rbind, a)

## Old interface
scaleBy(~Species, data = iris, center = TRUE, scale = FALSE)
#> $setosa
#>    Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 1         0.094       0.072       -0.062      -0.046
#> 2        -0.106      -0.428       -0.062      -0.046
#> 3        -0.306      -0.228       -0.162      -0.046
#> 4        -0.406      -0.328        0.038      -0.046
#> 5        -0.006       0.172       -0.062      -0.046
#> 6         0.394       0.472        0.238       0.154
#> 7        -0.406      -0.028       -0.062       0.054
#> 8        -0.006      -0.028        0.038      -0.046
#> 9        -0.606      -0.528       -0.062      -0.046
#> 10       -0.106      -0.328        0.038      -0.146
#> 11        0.394       0.272        0.038      -0.046
#> 12       -0.206      -0.028        0.138      -0.046
#> 13       -0.206      -0.428       -0.062      -0.146
#> 14       -0.706      -0.428       -0.362      -0.146
#> 15        0.794       0.572       -0.262      -0.046
#> 16        0.694       0.972        0.038       0.154
#> 17        0.394       0.472       -0.162       0.154
#> 18        0.094       0.072       -0.062       0.054
#> 19        0.694       0.372        0.238       0.054
#> 20        0.094       0.372        0.038       0.054
#> 21        0.394      -0.028        0.238      -0.046
#> 22        0.094       0.272        0.038       0.154
#> 23       -0.406       0.172       -0.462      -0.046
#> 24        0.094      -0.128        0.238       0.254
#> 25       -0.206      -0.028        0.438      -0.046
#> 26       -0.006      -0.428        0.138      -0.046
#> 27       -0.006      -0.028        0.138       0.154
#> 28        0.194       0.072        0.038      -0.046
#> 29        0.194      -0.028       -0.062      -0.046
#> 30       -0.306      -0.228        0.138      -0.046
#> 31       -0.206      -0.328        0.138      -0.046
#> 32        0.394      -0.028        0.038       0.154
#> 33        0.194       0.672        0.038      -0.146
#> 34        0.494       0.772       -0.062      -0.046
#> 35       -0.106      -0.328        0.038      -0.046
#> 36       -0.006      -0.228       -0.262      -0.046
#> 37        0.494       0.072       -0.162      -0.046
#> 38       -0.106       0.172       -0.062      -0.146
#> 39       -0.606      -0.428       -0.162      -0.046
#> 40        0.094      -0.028        0.038      -0.046
#> 41       -0.006       0.072       -0.162       0.054
#> 42       -0.506      -1.128       -0.162       0.054
#> 43       -0.606      -0.228       -0.162      -0.046
#> 44       -0.006       0.072        0.138       0.354
#> 45        0.094       0.372        0.438       0.154
#> 46       -0.206      -0.428       -0.062       0.054
#> 47        0.094       0.372        0.138      -0.046
#> 48       -0.406      -0.228       -0.062      -0.046
#> 49        0.294       0.272        0.038      -0.046
#> 50       -0.006      -0.128       -0.062      -0.046
#> 
#> $versicolor
#>     Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 51         1.064        0.43         0.44       0.074
#> 52         0.464        0.43         0.24       0.174
#> 53         0.964        0.33         0.64       0.174
#> 54        -0.436       -0.47        -0.26      -0.026
#> 55         0.564        0.03         0.34       0.174
#> 56        -0.236        0.03         0.24      -0.026
#> 57         0.364        0.53         0.44       0.274
#> 58        -1.036       -0.37        -0.96      -0.326
#> 59         0.664        0.13         0.34      -0.026
#> 60        -0.736       -0.07        -0.36       0.074
#> 61        -0.936       -0.77        -0.76      -0.326
#> 62        -0.036        0.23        -0.06       0.174
#> 63         0.064       -0.57        -0.26      -0.326
#> 64         0.164        0.13         0.44       0.074
#> 65        -0.336        0.13        -0.66      -0.026
#> 66         0.764        0.33         0.14       0.074
#> 67        -0.336        0.23         0.24       0.174
#> 68        -0.136       -0.07        -0.16      -0.326
#> 69         0.264       -0.57         0.24       0.174
#> 70        -0.336       -0.27        -0.36      -0.226
#> 71        -0.036        0.43         0.54       0.474
#> 72         0.164        0.03        -0.26      -0.026
#> 73         0.364       -0.27         0.64       0.174
#> 74         0.164        0.03         0.44      -0.126
#> 75         0.464        0.13         0.04      -0.026
#> 76         0.664        0.23         0.14       0.074
#> 77         0.864        0.03         0.54       0.074
#> 78         0.764        0.23         0.74       0.374
#> 79         0.064        0.13         0.24       0.174
#> 80        -0.236       -0.17        -0.76      -0.326
#> 81        -0.436       -0.37        -0.46      -0.226
#> 82        -0.436       -0.37        -0.56      -0.326
#> 83        -0.136       -0.07        -0.36      -0.126
#> 84         0.064       -0.07         0.84       0.274
#> 85        -0.536        0.23         0.24       0.174
#> 86         0.064        0.63         0.24       0.274
#> 87         0.764        0.33         0.44       0.174
#> 88         0.364       -0.47         0.14      -0.026
#> 89        -0.336        0.23        -0.16      -0.026
#> 90        -0.436       -0.27        -0.26      -0.026
#> 91        -0.436       -0.17         0.14      -0.126
#> 92         0.164        0.23         0.34       0.074
#> 93        -0.136       -0.17        -0.26      -0.126
#> 94        -0.936       -0.47        -0.96      -0.326
#> 95        -0.336       -0.07        -0.06      -0.026
#> 96        -0.236        0.23        -0.06      -0.126
#> 97        -0.236        0.13        -0.06      -0.026
#> 98         0.264        0.13         0.04      -0.026
#> 99        -0.836       -0.27        -1.26      -0.226
#> 100       -0.236        0.03        -0.16      -0.026
#> 
#> $virginica
#>     Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 101       -0.288       0.326        0.448       0.474
#> 102       -0.788      -0.274       -0.452      -0.126
#> 103        0.512       0.026        0.348       0.074
#> 104       -0.288      -0.074        0.048      -0.226
#> 105       -0.088       0.026        0.248       0.174
#> 106        1.012       0.026        1.048       0.074
#> 107       -1.688      -0.474       -1.052      -0.326
#> 108        0.712      -0.074        0.748      -0.226
#> 109        0.112      -0.474        0.248      -0.226
#> 110        0.612       0.626        0.548       0.474
#> 111       -0.088       0.226       -0.452      -0.026
#> 112       -0.188      -0.274       -0.252      -0.126
#> 113        0.212       0.026       -0.052       0.074
#> 114       -0.888      -0.474       -0.552      -0.026
#> 115       -0.788      -0.174       -0.452       0.374
#> 116       -0.188       0.226       -0.252       0.274
#> 117       -0.088       0.026       -0.052      -0.226
#> 118        1.112       0.826        1.148       0.174
#> 119        1.112      -0.374        1.348       0.274
#> 120       -0.588      -0.774       -0.552      -0.526
#> 121        0.312       0.226        0.148       0.274
#> 122       -0.988      -0.174       -0.652      -0.026
#> 123        1.112      -0.174        1.148      -0.026
#> 124       -0.288      -0.274       -0.652      -0.226
#> 125        0.112       0.326        0.148       0.074
#> 126        0.612       0.226        0.448      -0.226
#> 127       -0.388      -0.174       -0.752      -0.226
#> 128       -0.488       0.026       -0.652      -0.226
#> 129       -0.188      -0.174        0.048       0.074
#> 130        0.612       0.026        0.248      -0.426
#> 131        0.812      -0.174        0.548      -0.126
#> 132        1.312       0.826        0.848      -0.026
#> 133       -0.188      -0.174        0.048       0.174
#> 134       -0.288      -0.174       -0.452      -0.526
#> 135       -0.488      -0.374        0.048      -0.626
#> 136        1.112       0.026        0.548       0.274
#> 137       -0.288       0.426        0.048       0.374
#> 138       -0.188       0.126       -0.052      -0.226
#> 139       -0.588       0.026       -0.752      -0.226
#> 140        0.312       0.126       -0.152       0.074
#> 141        0.112       0.126        0.048       0.374
#> 142        0.312       0.126       -0.452       0.274
#> 143       -0.788      -0.274       -0.452      -0.126
#> 144        0.212       0.226        0.348       0.274
#> 145        0.112       0.326        0.148       0.474
#> 146        0.112       0.026       -0.352       0.274
#> 147       -0.288      -0.474       -0.552      -0.126
#> 148       -0.088       0.026       -0.352      -0.026
#> 149       -0.388       0.426       -0.152       0.274
#> 150       -0.688       0.026       -0.452      -0.226
#> 
scaleBy(~1, data = iris)
#> $<NA>
#> NULL
#>