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

如何按year.id开头的年份拆分R语言data.frame数据集?

拆分R语言数据集按年份分组的方法

嗨,这事儿好办!我给你分享几种实用的方法,帮你把数据集按年份拆成三个独立的data.frame:

方法一:Base R 原生split函数(最直接)

首先我们需要从year.id列里提取出年份信息,然后用split函数按年份分组:

# 先创建你的数据集
df <- data.frame(year.id = c("2011.01","2011.02","2011.03", "2013.01","2013.02","2013.03", "2015.01","2015.02","2015.03"), 
                 values =c(20,25,30, 40,50,60, 70,80,90))

# 提取年份:取year.id的前4个字符
df$year <- substr(df$year.id, 1, 4)

# 按年份拆分数据集,得到一个列表
split_dfs <- split(df, df$year)

# 从列表中提取出三个独立的数据集
df_2011 <- split_dfs[["2011"]]
df_2013 <- split_dfs[["2013"]]
df_2015 <- split_dfs[["2015"]]

这样你就得到了三个分别对应2011、2013、2015年的数据集,每个都保留了原数据的所有列。

方法二:用dplyr包(tidyverse风格)

如果你习惯用tidyverse工具链,dplyr的group_split或者直接filter都很方便:

方式A:group_split分组拆分

library(dplyr)

# 提取年份并分组拆分
split_dfs_dplyr <- df %>%
  mutate(year = substr(year.id, 1, 4)) %>%
  group_split(year, .keep = TRUE) # .keep=TRUE保留所有列

# 提取独立数据集
df_2011 <- split_dfs_dplyr[[1]]
df_2013 <- split_dfs_dplyr[[2]]
df_2015 <- split_dfs_dplyr[[3]]

方式B:直接filter筛选

这种方法更直观,不需要先分组,直接筛选对应年份的数据:

library(dplyr)

df_2011 <- df %>% filter(substr(year.id, 1, 4) == "2011")
df_2013 <- df %>% filter(substr(year.id, 1, 4) == "2013")
df_2015 <- df %>% filter(substr(year.id, 1, 4) == "2015")

小技巧:更灵活的年份提取

如果你的year.id格式可能有变化(比如不是固定的前4位),可以用stringr包的str_extract来精准提取年份:

library(stringr)

df$year <- str_extract(df$year.id, "^\\d{4}") # 提取开头的4位数字作为年份

这样不管后面的格式是什么,只要年份是开头的4位数字,都能准确提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:49:44