Структурирование климатических данных в R - PullRequest
1 голос
/ 02 мая 2020

Я очень новичок в программировании и недавно начал экспериментировать с R для целей анализа данных. В настоящее время я пытаюсь создать новый столбец на моем df на основе значений из другого столбца и суммировать общее количество осадков для каждого. Я получил свои климатические данные с сайта климатической группы PRISM и добавил следующий код для разделения полученного поля даты (1980-01) на годы и месяцы

climate <- tidyr::separate(climate,date, c("year", "month"), sep = "-") 

Мой вопрос как я могу go добавить новый столбец, который добавляет текст в зависимости от месяца?

Мой текущий подход к псевдокоду:

if climate$month == 1,2,3 then climate$season == winter

else climate$month == 4,5,6 then climate$season == spring

else climate$month == 7,8,9 then climate$season == summer

else climate$month == 10,11,12 climate$season == fall

Моя цель - сгенерировать новое значение df с рассчитанной суммой осадков для каждого сезона каждого года, избегая использования Excel * 1012. *

Спасибо за совет!

Решено, вот окончательный рабочий результат для будущего использования:

#Read in PRSIM data
prism <- read.csv('PRISM.csv')

#Seperate Date into Year - Month
prism <- tidyr::separate(prism,date, c("year", "month"), sep = "-")

#Convert factor variable into numeric
library(dplyr)
prism <- prism %>% mutate(month= as.numeric(as.character(month)))

#Generate new season column based on month
prism <- prism %>% mutate(season = case_when(
  month < 4 ~ "winter",
  month < 7 ~ "spring",
  month < 10 ~ "summer",
  month < 13 ~ "fall",
  TRUE ~ NA_character_
))

#Generate new data frame with Year and sum of each seasons value
clima <-  prism %>% 
          group_by(year, season) %>% 
          summarise(ppt_mm = sum(ppt_mm), tmin_c = sum(tmin_c), tmean_c = sum(tmean_c), tmax_c = sum(tmax_c), vdpmin_hpa = sum(vdpmin_hpa), vdpmax_hpa = sum(vdpmax_hpa))

#By Season
spring <- clima[clima$season=="spring", ]
summer <- clima[clima$season=="summer", ] 
fall <- clima[clima$season=="fall", ] 
winter <- clima[clima$season=="winter", ]

1 Ответ

0 голосов
/ 02 мая 2020

Вы можете использовать dplyr::case_when. Это лучше, чем условия цепочки:

library(dplyr)

df %>% mutate(season = case_when(
  month < 3 ~ "winter",
  month < 7 ~ "spring",
  month < 10 ~ "summer",
  month < 13 ~ "fall",
  TRUE ~ NA_character_
))

month season
1      1 winter
2      2 winter
3      3 spring
4      4 spring
5      5 spring
6      6 spring
7      7 summer
8      8 summer
9      9 summer
10    10   fall
11    11   fall
12    12   fall
13    13   <NA>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...