Группировать по нескольким переменным и суммировать dplyr - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь усреднять данные о концентрации CO2 каждые 30 секунд для каждого из моих датчиков:

    head(df)
# A tibble: 6 x 7
# Groups: BinnedTime [1]

  Sensor Date       Time   calCO2 DeviceTime          cuts   BinnedTime         
  <fctr> <date>     <time>  <dbl> <dttm>              <fctr> <chr>              
1 N1     2019-02-12 13:24     400 2019-02-12 13:24:02 (0,10] 2019-02-12 13:24:02
2 N1     2019-02-12 13:24     400 2019-02-12 13:24:02 (0,10] 2019-02-12 13:24:02
3 N1     2019-02-12 13:24     400 2019-02-12 13:24:03 (0,10] 2019-02-12 13:24:03
4 N2     2019-02-12 13:24     400 2019-02-12 13:24:03 (0,10] 2019-02-12 13:24:02
5 N3     2019-02-12 13:24     400 2019-02-12 13:24:03 (0,10] 2019-02-12 13:24:02
6 N3     2019-02-12 13:24     400 2019-02-12 13:24:05 (0,10] 2019-02-12 13:24:04

Я использую:

df %>%
  group_by(Sensor)%>%
  group_by(BinnedTime = cut(DeviceTime, breaks="30 sec")) %>%
  summarize(Concentration = mean(calCO2))

Но он не группируется поСначала датчик, он игнорирует их и вместо этого вычисляет среднее значение по BinnedTime.Любые мысли приветствуются.

Я читал о .dots=c("Sensor","BinnedTime"), но это не работает.

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

1 Ответ

0 голосов
/ 18 февраля 2019

Итак, суммируем комментарии @kath с некоторыми улучшениями, чтобы ответить на ваш следующий вопрос:

df %>%
    group_by(Sensor, BinnedTime = cut(DeviceTime, breaks="30 sec")) %>%
        mutate(Concentration = mean(calCO2)) %>%
    ungroup()

В приведенном выше примере будут сохранены все столбцы, но дублируется расчет концентрации для каждой строки df.Альтернатива, которая позволит вам одновременно свернуть и сохранить больше интересующих столбцов, - просто добавить их в операцию суммирования, как показано ниже.

    df %>%
    group_by(Sensor, BinnedTime = cut(DeviceTime, breaks="30 sec")) %>%
        summarize(Concentration = mean(calCO2),
                   Date = min(Date),
                   Time = min(Time),
                   StartDeviceTime = min(DeviceTime),
                   EndDeviceTime = max(DeviceTime)) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...