如何在R中读取.data格式数据并转换为tsibble时间序列结构?
R读取TSA数据集并转换为tsibble格式解决方案
读取数据集
你原有代码的编码、小数分隔符参数设置与实际数据格式不符,该数据集为ASCII编码的空格分隔纯文本,小数分隔符为英文句点,使用以下代码可正常读取:
TSA_raw <- read.table( "https://psl.noaa.gov/data/correlation/tsa.data", header = FALSE, sep = "", na.strings = "-99.99", col.names = c("Year", month.abb) )
参数说明:
sep = ""自动识别任意空白字符作为分隔符,适配数据中多空格分隔的格式na.strings = "-99.99"将数据集里的缺失值标记统一转换为R识别的NA格式col.names = c("Year", month.abb)直接给列命名为年份+12个月份的标准缩写,无需后续手动修改
转换为tsibble结构
需要提前安装加载dplyr、tidyr、lubridate、tsibble四个依赖包,运行以下代码即可得到你需要的结构:
library(dplyr) library(tidyr) library(lubridate) library(tsibble) TSA_tsibble <- TSA_raw %>% # 宽表转长表 pivot_longer( cols = -Year, names_to = "Month", values_to = "TSA" ) %>% # 过滤缺失值,不需要可以删除此行 filter(!is.na(TSA)) %>% # 生成年月时间索引 mutate(YearMonth = yearmonth(paste(Year, Month, sep = "-"))) %>% # 保留目标列 select(YearMonth, TSA) %>% # 转换为tsibble对象 as_tsibble(index = YearMonth)
结果验证
运行head(TSA_tsibble)可查看输出结构符合需求:
# A tsibble: 6 x 2 [1M] YearMonth TSA <mth> <dbl> 1 1948 Jan -0.22 2 1948 Feb -0.12 3 1948 Mar 0.04 4 1948 Apr -0.19 5 1948 May -0.21 6 1948 Jun 0.11
内容的提问来源于stack exchange,提问作者Rodrigo H. Ozon
相关产品推荐
相关产品推荐

