суммирование переменных с похожими, но не идентичными значениями x - PullRequest
1 голос
/ 15 апреля 2020

У меня есть набор данных с тремя повторениями. Я хочу построить среднюю переменную Y для каждой переменной X. Тем не менее, мои значения х не идентичны.

Вот небольшой пример того, что я имею в виду:

Time Value repeat_name
0    5     repeat1
0    5     repeat2
0    5     repeat3
3.1  7     repeat1
3.25 8     repeat2
3    9     repeat3
6.2  5     repeat1
6.5  5     repeat2
6    5     repeat3
9.3  5     repeat1
9.75 5     repeat2
9    5     repeat3

Теперь я надеялся, что есть какой-то способ, которым я мог бы уложить время и затем поместите все значения, которые соответствуют значению бина, в

, чтобы у меня были следующие бины:

Time
0-4 (values (5,5,5,7,8,9))
4-8 (values (5,5,5))
8-12 (values (5,5,5))

, и тогда я мог бы взять среднее значение этих бинов и построить гистограмму с помощью ggplot. Однако я не уверен, как мне достичь своей цели.

Я также не уверен, есть ли лучший подход к этому.

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

Ответы [ 2 ]

3 голосов
/ 15 апреля 2020

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

Я покажу два варианта, один с plyr::round_any, другой с использованием cut

library(tidyverse)

foo <- read_csv("Time, Value, repeat_name
0,    5,     repeat1
0,    5,     repeat2
0,    5,     repeat3
3.1,  7,     repeat1
3.25, 8,     repeat2
3,    9,     repeat3
6.2,  5,     repeat1
6.5,  5,     repeat2
6,    5,     repeat3
9.3,  5,     repeat1
9.75, 5,     repeat2
9,    5,     repeat3")

foo %>% 
  mutate(time_round = plyr::round_any(Time, 5)) %>% 
  ggplot(aes(time_round, Value)) +
  stat_summary() +
  scale_y_continuous(limits =  c(0, NA))
#> No summary function supplied, defaulting to `mean_se()`


foo %>% 
  mutate(time_cut = cut(Time, c(-Inf,4,8,Inf))) %>% 
  ggplot(aes(time_cut, Value)) +
  stat_summary() +
  scale_y_continuous(limits =  c(0, NA))
#> No summary function supplied, defaulting to `mean_se()`

Создано в 2020-04-15 пакетом Представление (v0.3.0)

2 голосов
/ 15 апреля 2020

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

Как указывает Tjebo выше, ggplot имеет некоторые функции stat, которые могут вычислять сводную статистику по данным.

Функция stat_summary_bin () может вычислять сводную статистику по всем диапазонам. Для вычисления среднего значения бинов Time сверху вы можете использовать следующий код:

ggplot(df, aes(x=Time, y = Value)) +
  stat_summary_bin(geom = "point", 
                   fun.y = mean, 
                   fun.ymin = NULL, 
                   fun.ymax= NULL, 
                   breaks=seq(0, 12,by = 4))

, где mean - сводная функция, вычисленная на основе данных, и диапазоны бинов задаются с помощью seq(0, 12, by = 4) чтобы соответствовать диапазону корзины сверху. Также можно указать ширину ячейки по умолчанию, используя аргумент binwidth, или количество корзин, используя аргумент bins. enter image description here В качестве альтернативы вы можете вычислить групповые средние с помощью оператора dplyr :: case_when (), чтобы сгенерировать переменную группировки, сгруппировать фрейм данных по этой вновь созданной переменной группировки и, наконец, суммировать значения.

df %>%
  mutate(
    group_var = case_when(
      Time >=0 & Time < 4 ~ 1,
      Time >= 4 & Time < 8 ~ 2,
      Time >= 8 & Time < 12 ~ 3
    )
  ) %>%
  group_by(group_var) %>% 
  summarize(grouped_mean = mean(Value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...