如何基于某列的值将一个DataFrame同时拆分为多个子DataFrame
拆分R数据框为按类别分组的子数据框
先确认原数据框的创建代码:
crop.genos <- data.frame(crop=rep(1:6, each=4),genos=rep(1:4, 6)) crop.genos$crop.genotype <- paste(crop.genos$crop, crop.genos$genos, sep="")
下面提供两种实用的拆分方案:
方法1:基础R原生split()函数
这是最简便的原生解决方案,直接按crop列分组拆分,返回包含所有子数据框的列表:
# 拆分数据框为列表,每个元素对应一个crop类别的子数据框 crop_subsets <- split(crop.genos, crop.genos$crop) # (可选)将列表中的子数据框转为全局环境中的独立对象(如crop_1、crop_2...) list2env(crop_subsets, envir = .GlobalEnv)
执行后可直接调用crop_1、crop_2等变量查看对应子数据框,比如crop_1的输出为:
crop genos crop.genotype 1 1 1 11 2 1 2 12 3 1 3 13 4 1 4 14
方法2:tidyverse生态的group_split()
若习惯使用dplyr等tidyverse工具,可通过group_split()实现分组拆分:
library(dplyr) # 按crop分组并拆分,返回子数据框列表 crop_subsets <- crop.genos %>% group_by(crop) %>% group_split() # (可选)给列表元素命名并转为全局独立对象 names(crop_subsets) <- paste0("crop_", 1:6) list2env(crop_subsets, envir = .GlobalEnv)
内容的提问来源于stack exchange,提问作者Aoxiang Xin
相关产品推荐
相关产品推荐

