суммировать исходные данные на основе расширенных категорий сетки - PullRequest
0 голосов
/ 26 марта 2019

Я хотел бы обобщить таблицу с помощью dplyr. Вот как бы я хотел продолжить:

  • У меня есть data.frame, как это:
 year    region week  site           species    gps_clutch
2017    sud   18     6                  au        337
2017    sud   20     10                 au        352
2017    sud   22     10                 au        352
2017    sud   24     10                 au        352
2017    sud   18     6                  aio       337
2017    sud   20     6                  aio       352
2017    sud   22     6                  au        352
2018    sud   20     6                  au        337
2018    sud   20     10                 au        352
2018    sud   22     10                 au        352
2018    sud   22     10                 aio       352
2018    sud   22     6                  au        352
2017    nor   19     5                  au        337
2017    nor   21     2                  au        352
2017    nor   23     5                  au        352
2017    nor   25     2                  au        352
2017    nor   19     5                  aio       337
2017    nor   25     5                  aio       352
2017    nor   19     5                  au        337
2018    nor   21     2                  aio       352
2018    nor   23     5                  aio        352
2018    nor   25     2                  au        352
2018    nor   23     5                  aio       337
2018    nor   23     5                  au       352
  • Я бы хотел посчитать количество «gps_clutch» для каждого года, региона, сайта, недели и расширить это на все возможные недели, зарегистрированные для каждого региона. Объясняю: в области «sud» я выбрал недели 18, 20, 22, 24, а в области «nor» недели 19, 21, 23, 25. Я хотел бы преобразовать неявные пропущенные значения в «0», но только для недели (вложенные в регионы), которые были отобраны. Я не хочу расширяться таким образом, чтобы получить строку для 19-й недели в регионе "sud", потому что этот регион не был выбран на этой конкретной неделе.

этот код хорошо работает для расширения сетки, как я хотел бы:

dat %>%
  group_by(region) %>%
  expand(year,site, species,week)

следующий код также работает, чтобы получить значения счетчика, но не расширяет сетку, как я хочу (я получаю только список недель, в течение которых я наблюдал что-то для каждого года, а не общее количество недель, отобранных для обоих года). Это означает, что если в «sud» «2017» у меня есть записи только для недель 20 и 22, сетка не будет расширена до недель 18 и 24:

field_subsetnord %>%
  group_by(year,region,site,species,week) %>%
  summarise(count_clutch=length(gps_clutch)) %>% 
  complete(week,nesting(year,sites,species), fill = list(count_clutch = 0))

вот таблицу, которую я хотел бы получить в конце:

 year    region week  site           species    count
2017     sud    18     6             au         1
2017     sud    20     6             au         0
2017     sud    22     6             au         1
2017     sud    24     6             au         0

2017     sud    18     6             aio        1
2017     sud    20     6             aio        1
2017     sud    22     6             aio        0
2017     sud    24     6             aio        0

2017     sud    18     10            au         0
2017     sud    20     10            au         1
2017     sud    22     10            au         1
2017     sud    24     10            au         1

2017     sud    18     10            aio        0
2017     sud    20     10            aio        0
2017     sud    22     10            aio        0
2017     sud    24     10            aio        0

2018     sud    18     6             au        0
2018     sud    20     6             au        1
2018     sud    22     6             au        1
2018     sud    24     6             au        0

2018     sud    18     6             aio       0
2018     sud    20     6             aio       0
2018     sud    22     6             aio       0 
2018     sud    24     6             aio       0

2018     sud    18     10            au        0
2018     sud    20     10            au        1
2018     sud    22     10            au        1
2018     sud    24     10            au        0

2018     sud    18     10            aio       0
2018     sud    20     10            aio       0
2018     sud    22     10            aio       1
2018     sud    24     10            aio       0

and so on for 2018...

Будем благодарны за любые предложения по смешению этих двух кодов:)

1 Ответ

0 голосов
/ 26 марта 2019

Вы так близки с вашими двумя подходами.По сути, они просто должны быть объединены, чтобы получить то, что вы ищете.:)

Группировка по регионам, затем complete() сначала набор данных, затем перегруппировка по всем переменным и summarise().Поскольку в gps_clutch теперь будут отсутствующие значения, вы можете суммировать не пропущенные значения (через !is.na) в операторе summarise() для подсчета сцеплений.

dat %>%
    group_by(region) %>%
    complete(year, site, species, week) %>% 
    group_by(year, region, site, species, week) %>%
    summarise(count_clutch = sum( !is.na(gps_clutch) ) )

# A tibble: 64 x 6
# Groups:   year, region, site, species [16]
    year region  site species  week count_clutch
   <int> <fct>  <int> <fct>   <int>        <int>
 1  2017 nor        2 aio        19            0
 2  2017 nor        2 aio        21            0
 3  2017 nor        2 aio        23            0
 4  2017 nor        2 aio        25            0
 5  2017 nor        2 au         19            0
 6  2017 nor        2 au         21            1
 7  2017 nor        2 au         23            0
 8  2017 nor        2 au         25            1
 9  2017 nor        5 aio        19            1
10  2017 nor        5 aio        21            0
# ... with 54 more rows
...