使用 summarise() 函数时出现 NA 的标准偏差

Ang*_*gus 5 r standard-deviation dplyr

我正在尝试计算birthwt在 RStudio 中找到的出生体重数据集 ( ) 的描述性统计数据。不过,我只关心几个变量:ageftvptllwt

这是我到目前为止的代码:

library(MASS)
library(dplyr)
data("birthwt")

grouped <- group_by(birthwt, age, ftv, ptl, lwt)

summarise(grouped, 
          mean = mean(bwt),
          median = median(bwt),
          SD = sd(bwt))
Run Code Online (Sandbox Code Playgroud)

它给了我一张印刷精美的表格,但只有有限数量的 SD 被填满,其余的说NA. 我就是不知道为什么或如何解决它!

小智 11

我在这里偶然发现了另一个原因,对我来说,答案也来自文档

# BEWARE: reusing variables may lead to unexpected results
mtcars %>%
    group_by(cyl) %>%
    summarise(disp = mean(disp), sd = sd(disp))
#> `summarise()` ungrouping output (override with `.groups` argument)
#> # A tibble: 3 x 3
#>     cyl  disp    sd
#>   <dbl> <dbl> <dbl>
#> 1     4  105.    NA
#> 2     6  183.    NA
#> 3     8  353.    NA
Run Code Online (Sandbox Code Playgroud)

因此,如果有人和我有同样的原因,不要重用变量,而是创建新变量:

mtcars %>%
group_by(cyl) %>%
summarise(
    disp_mean = mean(disp),
    disp_sd = sd(disp)
)

`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 3 x 3
    cyl disp_mean disp_sd
  <dbl>     <dbl>   <dbl>
1     4      105.    26.9
2     6      183.    41.6
3     8      353.    67.8
Run Code Online (Sandbox Code Playgroud)


akr*_*run 2

某些组的行数为 1。

grouped %>% 
     summarise(n = n())
# A tibble: 179 x 5
# Groups: age, ftv, ptl [?]
#     age   ftv   ptl   lwt     n
#   <int> <int> <int> <int> <int>
# 1    14     0     0   135     1
# 2    14     0     1   101     1
# 3    14     2     0   100     1
# 4    15     0     0    98     1
# 5    15     0     0   110     1
# 6    15     0     0   115     1
# 7    16     0     0   110     1
# 8    16     0     0   112     1
# 9    16     0     0   135     2
#10    16     1     0    95     1
Run Code Online (Sandbox Code Playgroud)

根据?sd

长度为 1 的向量的标准差为 NA。

这会产生只有一个元素NA的值sd