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

R语言基于列表内数据框的列生成按年份分类的新数据框列表

实现方法

你可以根据使用习惯选择以下两种方案,都能得到符合要求的按年份拆分的数据框列表:

方案1:tidyverse 实现(代码简洁易维护)

先给原列表元素命名为type1/type2,通过长宽表转换重组数据,最后按年份拆分:

library(tidyverse)

names(list_types) <- paste0("type", seq_along(list_types))

year_list <- list_types %>%
  bind_rows(.id = "type") %>%
  pivot_longer(cols = starts_with("year_"),
               names_to = "year",
               values_to = "value",
               names_prefix = "year_") %>%
  pivot_wider(id_cols = c(unit_name, year),
              names_from = type,
              values_from = value) %>%
  group_split(year) %>%
  setNames(paste0("df_", map_chr(., ~unique(.x$year))))

运行后year_list对象中即包含df_2014/df_2015/df_2016三个数据框,结构与示例完全匹配。如果需要把三个数据框单独释放到全局环境,追加运行list2env(year_list, .GlobalEnv)即可。

方案2:Base R 实现(无第三方包依赖)

不需要安装额外扩展包,直接按年份列循环提取拼接即可:

year_cols <- grep("^year_", names(list_types[[1]]), value = TRUE)
names(list_types) <- paste0("type", seq_along(list_types))

year_list <- lapply(year_cols, function(yr){
  res_df <- data.frame(unit_name = list_types[[1]]$unit_name)
  for(tp in names(list_types)){
    res_df[[tp]] <- list_types[[tp]][[yr]]
  }
  res_df
})
names(year_list) <- sub("year_", "df_", year_cols)

注意:以上代码默认列表中所有数据框的unit_name顺序完全一致,如果不同数据框内单元顺序存在差异,需要先按unit_name做排序匹配合并,避免数值和单元对应错位。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:01:22