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

如何用更简洁的R代码按年份分组列表中的数据集

按年份分组合并R列表中的数据集

我有一个包含多个分散数据集的R列表mydatalist,每个数据集都带有year字段,需要按相同年份对这些数据集进行分组合并。

示例数据

mydata12 <- data.frame(Age=c(12,13),Sex=c("F","H"), Weight=c(70,75),year=c(2012))
mydata13 <- data.frame(Age=c(14,15),Sex=c("F","H"), Weight=c(70,75),year=c(2013))
mydata14 <- data.frame(Age=c(16,17),Sex=c("F","H"), Weight=c(70,75),year=c(2014))
mydata2012 <- data.frame(Age=c(18,19),Sex=c("F","H"), Weight=c(70,75),year=c(2012))
mydata2013 <- data.frame(Age=c(20,13),Sex=c("H","H"), Weight=c(70,75),year=c(2013))
mydata2014 <- data.frame(Age=c(22,13),Sex=c("F","F"), Weight=c(70,75),year=c(2014))

mydatalist <- list(
  `12`=mydata12,
  `13`=mydata13,
  `14`=mydata14,
  `2013`=mydata2012,
  `2014`=mydata2013,
  `2015`=mydata2014
)

现有手动实现方式

list(`2012`=rbind(mydatalist$`12`,mydata2012),
     `2013`=rbind(mydatalist$`13`,mydata2013),
     `2014`=rbind(mydatalist$`14`,mydata2014))

需求

希望利用2012:2021、12:21这类年份模式编写更简洁的代码,避免为每个年份单独编写一行代码。


解决方案

方法一:Base R 实现

无需额外安装包,先合并所有数据集,再按year字段拆分:

# 合并列表内所有数据集为一个大的数据框
combined_data <- do.call(rbind, mydatalist)

# 按year字段拆分,自动生成按年份命名的分组列表
grouped_list <- split(combined_data, combined_data$year)

如果需要筛选特定年份范围(比如2012到2021年),可以添加以下步骤:

target_years <- 2012:2021
# 只保留目标年份的分组
grouped_list_filtered <- grouped_list[names(grouped_list) %in% as.character(target_years)]

方法二:Tidyverse 实现

使用dplyr和purrr包的组合代码,更简洁直观:

library(tidyverse)

grouped_list <- mydatalist %>%
  bind_rows() %>%          # 合并所有数据集
  group_split(year) %>%    # 按year字段拆分列表
  set_names(.$year)        # 为列表元素设置对应年份的名称

同样,筛选特定年份范围的代码如下:

target_years <- 2012:2021
grouped_list_filtered <- grouped_list[names(grouped_list) %in% as.character(target_years)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:58:12