计算分组变量的总体 sd

Compute population sd for grouped variables

这是我的小标题:

df <- tibble(x = c("a", "a", "a", "b", "b", "b"), y = c(1,2,3,4,6,8))
df
# A tibble: 6 x 2
  x         y
  <chr> <dbl>
1 a         1
2 a         2
3 a         3
4 b         4
5 b         6
6 b         8

我想计算 x 的分组变量的总体 sd。

我试过这个功能:

sqrt((n-1)/n) * sd(x)

和 dplyr 看起来像这样:

df %>%
  group_by(x) %>%
  summarise(sd = sqrt((length(df$y)-1)/length(df$y)) * sd(y)) %>%
  ungroup()

# A tibble: 2 x 2
  x        sd
* <chr> <dbl>
1 a     0.913
2 b     1.83 

当然这是不正确的,因为长度参数没有分组,因此取 n = 6 而不是 n = 3。 我应该得到

a = 0.8164966
b = 1.632993

编辑:

输出应该是我分组的变量和每个组的 sd 的小标题。

您可以使用n()函数

df %>%
    group_by(x) %>%
    summarise(sd = sqrt(( n() -1)/ n() ) * sd(y)) %>%
    ungroup()