如何将批量导入的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
相关产品推荐
相关产品推荐

