R语言如何使用gsub仅修改含特定字符CSF的数据集列名
蛋白质组学数据集列名批量简化方案
原始数据预览
PG.BiologicalProcess PG.MolecularFunction X.1..20210427_EXPL2_Evo1_CML_DIA44min_CSF-01-R_49.raw.PG.MS1Quantity X.2..20210427_EXPL2_Evo1_CML_DIA44min_CSF-02-R_50.raw.PG.MS1Quantity 1 NaN NaN 642500.0 174625.3 2 NaN NaN 790875.8 910906.9 X.3..20210608_EXPL2_Evo3_CML_DIA44m_60k15k_CSF-01-30R_109.raw.PG.MS1Quantity X.4..20210608_EXPL2_Evo3_CML_DIA44m_60k15k_CSF-01-Sr.raw.PG.MS1Quantity 1 866325 300197.3 2
处理规则
- 列名包含
CSF关键词:提取CSF-之后到第一个.或_之间的内容作为新列名,保留数字与字母之间的-分隔符、保留前导0- 示例1:原列名
X.1..20210427_EXPL2_Evo1_CML_DIA44min_CSF-01-R_49.raw.PG.MS1Quantity替换为01-R - 示例2:原列名
X.4..20210608_EXPL2_Evo3_CML_DIA44m_60k15k_CSF-01-Sr.raw.PG.MS1Quantity替换为01-Sr
- 示例1:原列名
- 列名不包含
CSF关键词:保持原列名不变
预期输出效果
PG.BiologicalProcess PG.MolecularFunction 01-R 02-R 01-30R 01-Sr 1 NaN NaN 642500.0 174625.3 866325 300197.3 2 NaN NaN 790875.8 910906.9 2164413 682274.3
可复现样本数据
a <- structure(list(PG.BiologicalProcess = c(NaN, NaN), PG.MolecularFunction = c(NaN, NaN), `[1] 20210427_EXPL2_Evo1_CML_DIA44min_CSF-01-R_49.raw.PG.MS1Quantity` = c(642500, 790875.75), `[2] 20210427_EXPL2_Evo1_CML_DIA44min_CSF-02-R_50.raw.PG.MS1Quantity` = c(174625.3281, 910906.875), `[3] 20210608_EXPL2_Evo3_CML_DIA44m_60k15k_CSF-01-30R_109.raw.PG.MS1Quantity` = c(866325, 2164413), `[4] 20210608_EXPL2_Evo3_CML_DIA44m_60k15k_CSF-01-Sr.raw.PG.MS1Quantity` = c(300197.3125, 682274.3125)), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"))
实现代码
Base R 方案
# 批量替换列名 colnames(a) <- ifelse( grepl("CSF", colnames(a)), sub(".*CSF-([^_.]+)[_.].*", "\\1", colnames(a)), colnames(a) ) # 输出验证结果 print(a)
正则逻辑说明:
.*CSF-:匹配列名开头到CSF-的所有内容([^_.]+):捕获第一个分组,匹配所有非_、非.的字符,即需要保留的目标列名[_.].*:匹配第一个_或.之后的所有内容- 最终仅保留捕获到的第一个分组内容,无
CSF的列名直接保留原值。
内容的提问来源于stack exchange,提问作者cmirian
相关产品推荐
相关产品推荐

