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

如何将IMF IFS下载的CSV宽格式数据转换为长格式?

转换IMF IFS宽格式CSV为长格式数据

R 实现方案

假设你的宽格式CSV结构示例如下:

country,indicator,1980Q1,1980Q2,1980Q3,1980Q4
USA,NGDP_R_SA_XDC,1000,1020,1030,1050
JPN,NGDP_R_SA_XDC,800,810,820,830

用tidyr和dplyr包处理:

# 加载依赖包
library(tidyr)
library(dplyr)

# 读取宽格式CSV数据
wide_data <- read.csv("your_imf_data.csv", stringsAsFactors = FALSE)

# 转换为目标长格式
long_data <- wide_data %>%
  pivot_longer(
    cols = starts_with(c("19", "20")), # 匹配所有年份开头的时期列
    names_to = "period",
    values_to = "value",
    values_drop_na = TRUE # 可选:剔除空值行
  ) %>%
  select(country, period, indicator, value) # 调整列顺序至目标结构

# 查看转换结果
head(long_data)

如果你的时期列是YYYY-MM格式(如1980-01),可添加格式转换步骤:

long_data <- long_data %>%
  mutate(period = zoo::as.yearqtr(period, format = "%Y-%m")) %>%
  mutate(period = format(period, "%YQ%q"))

Python 实现方案

用pandas包处理:

import pandas as pd

# 读取宽格式CSV数据
wide_data = pd.read_csv("your_imf_data.csv")

# 转换为目标长格式
long_data = wide_data.melt(
    id_vars=["country", "indicator"], # 保留的标识符列
    var_name="period",
    value_name="value",
    ignore_index=True
).dropna(subset=["value"]) # 可选:剔除空值行

# 调整列顺序
long_data = long_data[["country", "period", "indicator", "value"]]

# 若需将YYYY-MM格式转为季度格式
long_data["period"] = pd.to_datetime(long_data["period"]).dt.to_period("Q").astype(str)

# 查看转换结果
print(long_data.head())

两种方案均可生成与imfr包输出结构一致的长格式数据,包含country、period、indicator、value四列,适配后续分析需求。

内容的提问来源于stack exchange,提问作者JF96

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:02:06