You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:36:03