You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
  • 列名不包含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)

正则逻辑说明:

  1. .*CSF-:匹配列名开头到CSF-的所有内容
  2. ([^_.]+):捕获第一个分组,匹配所有非_、非.的字符,即需要保留的目标列名
  3. [_.].*:匹配第一个_或.之后的所有内容
  4. 最终仅保留捕获到的第一个分组内容,无CSF的列名直接保留原值。

内容的提问来源于stack exchange,提问作者cmirian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:06:04