Как суммировать средства по столбцам, включая вычисляемый столбец? - PullRequest
0 голосов
/ 30 января 2019

Как бы я использовал функцию dplyr summarize, чтобы вычислить среднее значение по всем столбцам, но включить результаты из пользовательского столбца, который требует необработанных данных?

Вот пример использования набора данных msleep.Я хочу, чтобы результат представлял собой одну строку, показывающую средние значения, и правильный результат для столбца sleep_tot_rem, который я создал.

library(tidyverse)

# Incorrect calculation for Mutated Column
msleep %>% filter(!is.na(sleep_rem)) %>% mutate(sleep_tot_rem = sleep_total / sleep_rem) %>% 
  summarize_if(is.numeric, mean, na.rm=TRUE)
#> # A tibble: 1 x 7
#>   sleep_total sleep_rem sleep_cycle awake brainwt bodywt sleep_tot_rem
#>         <dbl>     <dbl>       <dbl> <dbl>   <dbl>  <dbl>         <dbl>
#> 1        10.4      1.88       0.440  13.6   0.106   63.3          6.97

# Correct calculation for mutated column
msleep %>% filter(!is.na(sleep_rem)) %>% summarize_if(is.numeric, sum, na.rm=TRUE) %>% 
  mutate(sleep_tot_rem = sleep_total / sleep_rem)
#> # A tibble: 1 x 7
#>   sleep_total sleep_rem sleep_cycle awake brainwt bodywt sleep_tot_rem
#>         <dbl>     <dbl>       <dbl> <dbl>   <dbl>  <dbl>         <dbl>
#> 1        634.      114.        14.1  830.    5.11  3861.          5.54

Заранее спасибо.

1 Ответ

0 голосов
/ 30 января 2019

Проблема в том, что первый результат - это правильное вычисление среднего отношения общего сна к бодрствующему сну.Среднее значение отношения вряд ли будет таким же, как отношение средних значений.Вопрос, на который вам нужно ответить, это то, что вы хотите: среднее отношение или отношение средних значений.

Если первое, используйте свой первый расчет, потому что вы хотите взять среднее значение из вычисленных результатов.Если последнее, используйте второй расчет, потому что вы хотите рассчитать результаты на основе среднего сна.Поскольку обе меры имеют одинаковое количество записей, отношение сумм равно отношениям средних значений (сумма - это просто среднее число умноженных на значения - константа, которая сокращается сверху и снизу).

Мы можем видеть это в упрощенном примере.Если мы создадим две переменные, a и b:

a <- 1:10
b <- 11:20

Мы увидим, что среднее отношение a: b равно:

mean(a / b)

0.3312286, а соотношениеиз средних значений:

mean(a) / mean(b)

0,3548387.

Это связано с различиями в весе.Среднее из соотношений весит все 10 значений одинаково, но отношение средних значений больше зависит от любых выбросов.Это становится еще более очевидным, если вы используете более экстремальный пример:

x <- c(1:9, 100)
y <- c(2*(1:9), 500)

mean(x / y)
mean(x) / mean(y)

Здесь среднее отношение составляет 0,47, поскольку 100/500 = 0.2 оказывает относительно небольшое влияние.Тем не менее, отношение среднего составляет 0,2458, потому что 100 и 500 имеют гораздо большее влияние на среднее значение, чем остальные 9 значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...