Есть ли обходной путь для ежегодной статистики не табличных данных с помощью `tidyr` или` dplyr`? - PullRequest
0 голосов
/ 06 мая 2018

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

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

enter image description here

Я думаю, dplyr или tidyr могли бы помочь в таком агрегировании данных. Возможно, первое, что нужно сделать, это изменить исходные данные в csv и получить длинную электронную таблицу для каждой координаты сетки и просто использовать утилиты base::sum или dplyr::summarize для составления годовой статистики. Для этого вот моя первая попытка получить длинную таблицу:

raw_csvData %>% 
    group_by(.$days) %>% 
    tidyr::spread(spread(key = .$days,value = precip)) 

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

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

Если мне не нужно изменять исходные данные в csv, чтобы получить длинную электронную таблицу, каково эффективное и быстрое решение для этой задачи агрегирования данных? Любой хороший способ сделать это с dplyr, tidyr или наоборот? Есть идеи?

1 Ответ

0 голосов
/ 06 мая 2018

Обновление (за комментарии)
Если вам нужны только годовые суммарные осадки и long / lat, и ничего больше, используйте group_by и summarise:

raw_csvData %>% 
  group_by(long, lat) %>%
  summarise(total_precip = sum(precip)) 

Выход:

# A tibble: 6 x 3
# Groups:   long [1]
   long   lat total_precip
  <dbl> <dbl>        <dbl>
1  6.12  47.4         846.
2  6.12  47.6         847.
3  6.12  47.9         852.
4  6.12  48.1         860.
5  6.12  48.4         867.
6  6.12  48.6         899.

Оригинал (для добавления столбца в существующий фрейм данных)
Вы можете удалить days с помощью select(-days).
Затем group_by long и lat и вычислите сгруппированные суммы. Используйте mutate вместо summarise, что добавит столбец суммы обратно в ваши исходные данные.

raw_csvData %>% 
  select(-days) %>%
  group_by(long, lat) %>%
  mutate(total_precip = sum(precip)) 

Выход:

# A tibble: 6 x 7
# Groups:   long, lat [6]
   year month   day  long   lat precip total_precip
  <int> <int> <int> <dbl> <dbl>  <dbl>        <dbl>
1  1980     1     1  6.12  47.4   0.           846.
2  1980     1     1  6.38  47.4   0.           846.
3  1980     1     1  6.62  47.4   0.           846.
4  1980     1     1  6.88  47.4   0.           844.
5  1980     1     1  7.12  47.4   0.           853.
6  1980     1     1  7.38  47.4   1.20         880.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...