在R中将逐日降雨数据转换为年月-日行列结构
解决逐日降雨数据的宽格式转换问题
你的原代码问题出在split的逻辑上:cumsum(strftime(dat$Date, '%Y%m'))会把字符型的年月转成NA,导致分组完全错误。用tidyverse的pivot_wider可以轻松实现你要的格式,步骤如下:
# 加载必要包(tidyverse已包含dplyr和lubridate,无需重复加载) library(tidyverse) # 读取并处理数据 dat <- read.csv('RF.csv') dat$Date <- as.Date(as.factor(dat$Date), format='%Y%m%d') # 提取年-月标识和日期字段 dat_processed <- dat %>% mutate( year_month = format(Date, "%Y-%m"), # 生成如"1981-01"的行标识 day = day(Date) # 提取1-31的日期作为列名 ) # 转换为目标宽格式 new_data <- dat_processed %>% pivot_wider( id_cols = year_month, # 按年-月分组作为行 names_from = day, # 用日期作为列名 values_from = RF # 填充降雨量数据 ) # 可选:将年-月设置为行名(去掉单独的year_month列) rownames(new_data) <- new_data$year_month new_data <- new_data %>% select(-year_month)
转换后的结果会和你预期的一致:每一行对应一个「年-月」,列是1到31日,对应日期的降雨量自动填充,无数据的日期(如二月的30、31日)会显示为NA。
内容的提问来源于stack exchange,提问作者Abew
相关产品推荐
相关产品推荐

