如何按Sample列中句号前的内容分组并拆分R语言数据框
按Sample列前缀分组并拆分数据框的R实现
方法1:基础R + stringr实现
先提取Sample列中.之前的分组标识,再拆分数据框并导出为独立对象:
# 安装并加载stringr(首次使用需安装) # install.packages("stringr") library(stringr) # 新增分组列,提取Sample中.之前的内容 df$Group <- str_extract(df$Sample, "^[^.]+") # 按分组拆分数据框为列表 df_groups <- split(df, df$Group) # 将列表中的每个数据框导出到全局环境,命名格式为df_分组名 for (group_name in names(df_groups)) { assign(paste0("df_", group_name), df_groups[[group_name]], envir = .GlobalEnv) }
执行后,你会得到df_A、df_AB这类独立数据框,分组数量再多也能自动处理。
方法2:dplyr + stringr实现
如果习惯tidyverse语法,可以用以下方式:
# 安装并加载所需包(首次使用需安装) # install.packages(c("dplyr", "stringr")) library(dplyr) library(stringr) # 生成分组列表 df_groups <- df %>% mutate(Group = str_extract(Sample, "^[^.]+")) %>% group_split(Group, .keep = FALSE) # .keep=FALSE表示不保留Group列,按需调整 # 给列表命名并导出到全局环境 names(df_groups) <- unique(str_extract(df$Sample, "^[^.]+")) list2env(df_groups, envir = .GlobalEnv)
验证结果
调用对应分组的数据框即可查看:
df_A #> Wavelength Sample Mean #> 1 400 A.1 0.434 #> 2 400 A.2 0.347 #> 3 400 A.3 0.434 df_AB #> Wavelength Sample Mean #> 4 400 AB.1 0.674 #> 5 400 AB.2 0.591 #> 6 400 AB.3 0.857
内容的提问来源于stack exchange,提问作者Keegan
相关产品推荐
相关产品推荐

