如何将R语言DataFrame按年份过滤拆分,生成命名矩阵列表?
按年份拆分DataFrame为命名矩阵列表的实现方法
给定包含年份列和数值列x的DataFrame,需要按年份分组,将每组的x列转换为单列矩阵,最终生成以yr年份为命名规则的列表,以下是两种高效实现方式:
方法一:使用tidyverse工具链(dplyr + purrr)
通过分组拆分、命名设置、批量转换三步完成,代码简洁且可读性强:
library(tidyverse) # 生成可复现的示例数据 set.seed(123) df <- data.frame(year = sample(rep(2010:2020, times=3)), x = runif(33)) # 执行拆分与转换操作 df_list <- df %>% group_split(year, .keep = FALSE) %>% # 按year分组拆分,自动丢弃year列 set_names(paste0("yr", unique(sort(df$year)))) %>% # 为列表元素设置yrXXXX格式的名称 map(as.matrix) # 将每个分组的数据框转为单列矩阵
方法二:使用Base R
无需额外加载包,利用原生函数完成需求,适合轻量场景:
set.seed(123) df <- data.frame(year = sample(rep(2010:2020, times=3)), x = runif(33)) # 拆分x向量并转换为矩阵 df_list <- lapply(split(df$x, df$year), function(x) matrix(x, ncol = 1)) # 重命名列表元素为yrXXXX格式 names(df_list) <- paste0("yr", names(df_list))
结果验证
执行str(df_list)可查看最终结构,每个列表元素均为对应年份的单列矩阵,命名完全符合预期。
内容的提问来源于stack exchange,提问作者amrods
相关产品推荐
相关产品推荐

