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

如何将批量导入的CSV文件合并为面板数据格式DataFrame

合并CSV为面板数据的解决方案

1. 提取国家标识

首先从你导入的文件名中提取对应国家名称(假设文件名是阿根廷.csv这类直接以国家命名的格式):

# 移除文件名的.csv后缀,得到国家名
country_names <- gsub("\\.csv$", "", temp)

2. 批量处理数据框(保留目标列+添加国家列)

情况1:已知时间列和温度列的具体名称

如果你的时间列固定叫year,国家平均温度列固定叫avg_temp,直接用下面的代码:

library(dplyr)

# 遍历每个数据框,添加国家列并筛选所需字段
processed_dfs <- mapply(function(df, country) {
  df %>%
    mutate(country = country) %>%  # 新增国家标识列
    select(country, year, avg_temp)  # 只保留需要的三列
}, myfiles, country_names, SIMPLIFY = FALSE)

情况2:不确定列名,自动识别目标列

如果每个CSV的列名不统一,可以通过特征自动识别:

  • 时间列:所有值都在1901-2021区间的列
  • 温度列:唯一的非时间类数值型列(假设地方级变量是多列,仅国家温度是单列)
library(dplyr)

processed_dfs <- mapply(function(df, country) {
  # 识别时间列
  time_col <- names(df)[sapply(df, function(col) all(col %in% 1901:2021))]
  # 识别温度列(排除时间列的数值型列)
  temp_col <- names(df)[sapply(df, is.numeric) & !names(df) %in% time_col][1]
  
  df %>%
    mutate(country = country) %>%
    select(country, all_of(time_col), all_of(temp_col)) %>%
    rename(year = all_of(time_col), avg_temp = all_of(temp_col))  # 统一列名方便后续处理
}, myfiles, country_names, SIMPLIFY = FALSE)

3. 合并为面板数据

最后把所有处理好的数据框合并成一个大的面板数据框:

# 合并所有数据框
panel_data <- bind_rows(processed_dfs)

# 可选:转换为标准面板数据格式(使用plm包)
library(plm)
panel_plm <- plm.data(panel_data, index = c("country", "year"))

内容的提问来源于stack exchange,提问作者MAXIMILIANO VILLALOBOS ANDUEZA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:15:19