如何从列平均值中减去每个元素并将其除以列标准偏差

时间:2021-07-21 07:41:30

标签: r

我对 R 很陌生,所以我需要一些帮助来解决这个问题。我有一个不同地区 (AEZ) 每日降雨量值的数据框。

输出需要是另一个采用(个别降雨量 - 列平均值)/列标准差的表。

例如,在下表中,对于 01.Jan 和 AEZ 3,它应该采用 (0.0402 - 平均值 (01.Jan)) / SD(01.Jan)。需要为每个 AEZ 运行此计算,然后输出将是包含这些计算结果的另一个表格。

 AEZ  `01-Jan` `02-Jan` `03-Jan` `04-Jan` `05-Jan` `06-Jan`     `07-Jan`
1 3       0.0402   0.0044   0.0998   0.142    0.0061   0.0267   0.0351
2 12      0.0143   0.0027   0.0027   0.0029   0.0317   0.0012   0.0012
3 48      0        0        0.0026   0.0015   0.0019   0        0     
4 77      0        0        0.0059   0.0124   0.0048   0.0009   0     
5 160     0.0261   0.0173   0.057    0.0221   0.0892   0        0.0003
6 162     0.167    0.0037   0.0041   0.0683   0.102    0.199    0.0308
7 178     0.0062   0.0033   0.0808   0.101    0.0033   0.0023   0.0315

2 个答案:

答案 0 :(得分:1)

这将标准化(居中和缩放)原始数据框。

df[,-1] <- scale(df[,-1], center = TRUE, scale = TRUE)

要缩放副本,请执行以下操作:

foo <- df
foo[,-1] <- scale(foo[,-1], center = TRUE, scale = TRUE)

答案 1 :(得分:0)

我们可以使用dplyr

library(dplyr)

data %>% 
  mutate(across(-AEZ, ~ (.x - mean(.x)) / sd(.x)))

哪个返回

# A tibble: 7 x 8
    AEZ `\`01-Jan\`` `\`02-Jan\`` `\`03-Jan\`` `\`04-Jan\`` `\`05-Jan\`` `\`06-Jan\`` `\`07-Jan\``
  <dbl>        <dbl>        <dbl>        <dbl>        <dbl>        <dbl>        <dbl>        <dbl>
1     3       0.0663      -0.0145        1.51         1.67       -0.647       -0.0835        1.22 
2    12      -0.369       -0.302        -0.793       -0.857      -0.0563      -0.429        -0.751
3    48      -0.610       -0.759        -0.795       -0.882      -0.744       -0.445        -0.821
4    77      -0.610       -0.759        -0.717       -0.684      -0.677       -0.433        -0.821
5   160      -0.171        2.17          0.495       -0.508       1.27        -0.445        -0.804
6   162       2.20        -0.133        -0.760        0.332       1.56         2.25          0.969
7   178      -0.505       -0.201         1.06         0.926      -0.711       -0.414         1.01