如何在R中读取.data格式数据并构建时间序列对象
R语言宽表转时间序列长表实现方案
依赖包
首先加载用到的工具包:
library(tidyverse) library(lubridate) library(tsibble)
SOI数据处理代码
# 读取原始数据,skip参数用于跳过文件开头的说明行,可根据实际文件调整行数 soi_raw <- read_table("soi.data", skip = 7, col_names = c("Year", month.abb)) # 宽转长+格式转换 soi_clean <- soi_raw %>% # 将12个月份列从宽格式转为长格式 pivot_longer(cols = -Year, names_to = "Month", values_to = "SOI") %>% # 拼接生成年月字段,转为<mth>类型 mutate(YearMonth = yearmonth(my(paste(Month, Year)))) %>% # 按需求保留指定列 select(YearMonth, SOI) # 可选:将占位缺失值-99.99转为标准NA值 # soi_clean <- soi_clean %>% mutate(SOI = na_if(SOI, -99.99))
ONI数据处理代码
逻辑和SOI完全一致,仅调整读取参数和值列名即可:
# 读取原始数据 oni_raw <- read_table("oni.data", skip = 8, col_names = c("Year", month.abb)) # 格式转换 oni_clean <- oni_raw %>% pivot_longer(cols = -Year, names_to = "Month", values_to = "ONI") %>% mutate(YearMonth = yearmonth(my(paste(Month, Year)))) %>% select(YearMonth, ONI) # 可选:替换占位缺失值 # oni_clean <- oni_clean %>% mutate(ONI = na_if(ONI, -99.9))
处理完成后soi_clean和oni_clean就是符合需求格式的数据集,可直接用于后续时间序列分析。
内容的提问来源于stack exchange,提问作者Rodrigo H. Ozon
相关产品推荐
相关产品推荐

