用Dplyr mutate Dapply / Lapply计算两组的多个z分数

时间:2017-10-26 16:09:36

标签: dplyr apply normalization mutate

我试图用两组来计算多个变量的Z分数。

以下是一个例子:

data = mtcars

我想获得Z分数的变量:

vars <- c("mpg", "disp", "hp", "drat", "wt", "qsec")

计算一个变量的z分数(工作):

mtcars %>% group_by(am, vs) %>% mutate(z_mpg = (mpg - mean(mpg)) / sd(mpg))

问题是我无法通过以前的代码来处理所有“变量”变量,因此我无法获得所有的“变量” - 所以我会立即得到所有的Z分数。

如果你知道如何在记录数据(平均值为0,SD 1)的同时对帐户进行规范化,而不是z得分,这对我也有帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用mutate_at并使用funs来定义您的z-score功能。在这种情况下,它使用.来表示您要改变的列。

mtcars %>%
  group_by(am, vs) %>%
  mutate_at(.cols = vars, funs(z = (. - mean(.)) / sd(.)))

Source: local data frame [32 x 17]
Groups: am, vs [4]

     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb     mpg_z_    disp_z_      hp_z_    drat_z_       wt_z_     qsec_z_
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>      <dbl>      <dbl>      <dbl>      <dbl>       <dbl>       <dbl>
1   21.0     6 160.0   110  3.90 2.620 16.46     0     1     4     4  0.3118089 -0.4852978 -0.7168218 -0.1024154 -0.48795905  0.60787578
2   21.0     6 160.0   110  3.90 2.875 17.02     0     1     4     4  0.3118089 -0.4852978 -0.7168218 -0.1024154  0.03595488  1.12105734
3   22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1 -1.1710339  0.9679756  0.5147599 -0.7890520  0.66286051 -0.09519147
4   21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1  0.2659345  1.6870444  0.3753676 -1.0547191  0.05956492 -0.36000354
5   18.7     8 360.0   175  3.15 3.440 17.02     0     0     3     2  1.3156017  0.0331832 -0.5745432  0.1266602 -0.86434641 -0.15281032
6   18.1     6 225.0   105  2.76 3.460 20.22     1     0     3     1 -1.0695190  1.0153670  0.1364973 -1.7435153  0.76407410  0.17268463
7   14.3     8 360.0   245  3.21 3.570 15.84     0     0     3     4 -0.2703291  0.0331832  1.5237884  0.3872184 -0.69514319 -1.62477907
8   24.4     4 146.7    62  3.69 3.190 20.00     1     0     4     2  1.4799831 -0.5783405 -1.9177872  0.2582986 -0.01232378  0.02243925
9   22.8     4 140.8    95  3.92 3.150 22.90     1     0     4     2  0.8324905 -0.6984282 -0.3412433  0.7533708 -0.12734568  2.00294653
10  19.2     6 167.6   123  3.92 3.440 18.30     1     0     4     4 -0.6243679 -0.1529447  0.9964304  0.7533708  0.70656315 -1.13854778
# ... with 22 more rows