Стандартное отклонение приходит NA при использовании функции summaze()
Я пытаюсь рассчитать описательную статистику для набора данных по массе тела при рождении (birthwt
) найдено в RStudio. Однако меня интересуют только несколько переменных: age
, ftv
, ptl
а также lwt
,
Это код, который я до сих пор:
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))
Это дает мне довольно напечатанную таблицу, но заполнено только ограниченное количество SD, а остальные говорят NA
, Я просто не могу понять, почему или как это исправить!
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
В соответствии с ?sd
,
Стандартное отклонение вектора длины-1 равно NA.
Это приводит к NA
значения для sd
где есть только один элемент
Я наткнулся здесь по другой причине, а также для меня ответ исходит из документов :
# 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
Итак, если у кого-то такая же причина, как у меня, вместо повторного использования переменной создайте новые:
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