如何使用Pandas按数据集中标题的C1-C4标识对样本分组?
提取样本名中的C类标识并分组实现方案
根据你的样本名格式(点分隔,最后一段为C1/C2/C3/C4这类分组标识),以下是几种常用工具的实现方法:
Python(Pandas)方案
适合处理结构化数据集,步骤清晰易扩展:
import pandas as pd # 示例数据(替换为你的实际数据读取逻辑,比如pd.read_csv()) data = pd.DataFrame({ 'sample_id': [ 'TCGA.02.0047.GBM.C4', 'TCGA.02.0055.GBM.C4', 'TCGA.ZS.A9CG.LIHC.C3', 'TCGA.ZU.A8S4.CHOL.C1', 'TCGA.ZX.AA5X.CESC.C2' ], 'expression_value': [12.3, 45.6, 78.9, 10.1, 23.4] }) # 1. 清洗样本名:去除前后空格和末尾的标点(逗号、点) # 2. 按点分割字符串,取最后一段作为分组标识 data['group'] = data['sample_id'].str.strip().str.rstrip(',.').str.split('.').str[-1] # 按分组标识分组 grouped = data.groupby('group') # 示例:输出每个分组的统计信息或数据内容 for group_label, group_data in grouped: print(f"=== 分组 {group_label} ===") print(group_data[['sample_id', 'expression_value']])
R语言方案
适合生信领域用户,兼容多数生物信息学分析流程:
# 构造示例数据(替换为你的数据读取逻辑,比如read.table()) sample_data <- data.frame( sample_id = c( "TCGA.02.0047.GBM.C4", "TCGA.02.0055.GBM.C4", "TCGA.ZS.A9CG.LIHC.C3", "TCGA.ZU.A8S4.CHOL.C1", "TCGA.ZX.AA5X.CESC.C2" ), expression_value = c(12.3, 45.6, 78.9, 10.1, 23.4) ) # 提取分组标识:先去除末尾标点,再按点分割取最后一段 sample_data$group <- sapply( strsplit(gsub("[,.]$", "", sample_data$sample_id), "\\."), function(x) tail(x, 1) ) # 按分组拆分数据 grouped_list <- split(sample_data, sample_data$group) # 示例:查看每个分组内容 lapply(grouped_list, print)
命令行(AWK)方案
适合快速处理纯文本格式的样本列表:
假设你的样本名保存在sample_list.txt文件中(每行一个样本),执行以下命令会将每个分组的样本写入对应文件(如C1.txt、C2.txt):
awk '{ # 去除行尾的逗号或点 gsub(/[,.]$/, "", $0) # 按点分割字符串,取最后一段作为分组名 split($0, parts, ".") group = parts[length(parts)] # 将当前样本写入对应分组文件 print $0 > group ".txt" }' sample_list.txt
核心思路说明
所有方案的核心逻辑一致:
- 先清洗样本名:去除前后空白字符和末尾的标点(逗号、点),避免干扰分割逻辑
- 再提取分组标识:利用样本名的点分隔结构,取分割后的最后一段(即C1/C2/C3/C4)
- 最后按标识分组:根据提取的分组键对样本数据进行分组操作
内容的提问来源于stack exchange,提问作者feaserwood
相关产品推荐
相关产品推荐

