在 R 中构建气候数据
Posted
技术标签:
【中文标题】在 R 中构建气候数据【英文标题】:Structuring climate data in R 【发布时间】:2020-08-16 16:24:57 【问题描述】:我对编程非常陌生,最近开始尝试使用 R 进行数据分析。我目前正在尝试根据另一列的值在我的 df 上生成一个新列,并将每个列的降雨总量相加。我从 PRISM 气候组网站获得了我的气候数据,并添加了以下代码以将获得的日期字段 (1980-01) 分隔为年和月
climate <- tidyr::separate(climate,date, c("year", "month"), sep = "-")
我的问题是如何添加一个基于月份添加文本的新列?
我目前的伪代码方法是
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
感谢您的建议!
已解决,这是最终的工作输出以供将来参考:
#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】:您可以使用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>
【讨论】:
我试了一下,但由于某种原因,我的季节字段仅由冬季填充。气候$season % mutate(season = case_when(month 您可能有一个因子变量。在执行case_when
之前尝试df <- climate%>% mutate(month= as.numeric(as.character(month)))
是的,成功了!您是否知道如何将每年的季节相加,以使生成的 df 看起来与我在 Excel 中创建的相似?
看起来您已经有了该列,所以它只是重新排序。在这种情况下,您可以使用df %>% select(year, season, ppt_mm)
。如果您不想删除其他列,请执行df %>% select(year, season, ppt_mm, everything())
。如果答案适合你,你可以接受(guidelines here if you don't know how to do)
是的,该列已经创建,我对其显示的顺序没有偏好。例如,我只想添加 1980 年的所有冬季值,所以每年只有一个总和季节性值以上是关于在 R 中构建气候数据的主要内容,如果未能解决你的问题,请参考以下文章