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

R语言:50个同结构年度DataFrame按国籍整理为时序数据需求

解决方法

你提到的用列表处理完全可行,这正是R中批量处理多个同结构DataFrame的标准方式。下面是一步步的实操代码,适合新手理解:

1. 准备工作:加载工具包

先安装并加载tidyverse(包含数据处理常用的dplyr、purrr、tidyr等包):

# 第一次使用需安装
install.packages("tidyverse")
library(tidyverse)

2. 把所有年度DataFrame放进列表

不用手动逐个输入,用代码批量获取df_1到df_50:

# 生成所有DataFrame的名称,批量存入列表
df_list <- mget(paste0("df_", 1:50))
# 给每个列表元素添加年份标识(df_1对应年份1,以此类推)
df_list <- map2(df_list, 1:50, ~ mutate(.x, year = .y))

3. 合并成统一的DataFrame

把分散的年度数据合并成一个大表,方便后续整理:

combined_df <- bind_rows(df_list)

合并后的数据结构是:每行对应某一年某国籍的total和male数值,包含nationality、total、male、year四列。

4. 生成每个国籍的独立DataFrame

根据你要的「每一列对应一个年份」的格式,分两种常用情况处理:

情况1:行是指标(total/male),列是年份

这种格式更直观展示不同指标的年度变化:

# 先转成长格式,再转宽格式并按国籍拆分
nationality_dfs <- combined_df %>%
  pivot_longer(cols = c(total, male), names_to = "indicator", values_to = "value") %>%
  pivot_wider(names_from = year, values_from = value) %>%
  group_split(nationality, .keep = FALSE)

# 给列表元素命名,方便直接调用(比如德国的数据就是nationality_dfs$german)
names(nationality_dfs) <- unique(combined_df$nationality)

生成的德国数据结构示例:

indicator year1 year2
  <chr>     <dbl> <dbl>
1 total       500   800
2 male        400   300

情况2:列是「年份_指标」的组合

如果需要把同一年份的两个指标放在相邻列:

# 直接转宽格式,再按国籍拆分
nationality_dfs <- combined_df %>%
  pivot_wider(names_from = year, values_from = c(total, male)) %>%
  group_split(nationality, .keep = FALSE)

names(nationality_dfs) <- unique(combined_df$nationality)

生成的德国数据结构示例:

total_1 total_2 male_1 male_2
    <dbl>   <dbl>  <dbl>  <dbl>
1     500     800    400    300

5. 绘制时间序列图

以情况1的德国数据为例,转成长格式后用ggplot画图:

nationality_dfs$german %>%
  pivot_longer(cols = -indicator, names_to = "year", values_to = "value") %>%
  mutate(year = as.integer(year)) %>%
  ggplot(aes(x = year, y = value, color = indicator)) +
  geom_line(linewidth = 1) +
  labs(title = "德国人口趋势", x = "年份", y = "人数")

关键说明

用列表处理多个同结构数据是R的核心技巧之一,避免了手动处理50个DataFrame的重复劳动,后续修改或扩展操作也只需调整批量处理的代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:25:13