如何在R中按因子水平拆分dataframe并生成对应命名的新dataframe
按因子水平拆分DataFrame并生成同名对象
你可以用以下两种常用方法实现需求:
方法一:基础R实现
先构造示例数据(方便复现):
df <- data.frame( Species = factor(c("CANG", "CANG", "AMRO", "AMRO", "MOBL", "MOBL", "MOBL")) )
使用split()拆分数据框为列表,再用list2env()将列表元素转为全局环境的对象:
# 按Species因子水平拆分 split_result <- split(df, df$Species) # 将列表中的每个数据框导出到全局环境,名称对应因子水平 list2env(split_result, envir = .GlobalEnv)
运行后,全局环境中会生成CANG、AMRO、MOBL三个数据框,分别对应各自的因子行。
方法二:tidyverse工具链实现
如果习惯使用tidyverse系列包,可以结合group_split()和purrr的函数完成:
library(tidyverse) # 按Species分组拆分,同时保留原列 grouped_dfs <- df %>% group_split(Species, .keep = TRUE) # 获取所有因子水平名称 level_names <- levels(df$Species) # 循环将每个分组赋值为同名全局对象 walk2(grouped_dfs, level_names, ~ assign(.y, .x, envir = .GlobalEnv))
验证结果
运行任意方法后,直接调用对象即可查看结果:
# 查看CANG数据框 CANG # 查看AMRO数据框 AMRO # 查看MOBL数据框 MOBL
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

