如何按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
相关产品推荐
相关产品推荐

