使用find中的匹配查找和替换列名称

时间:2015-04-08 19:12:48

标签: r

我试图在名为totsMerge的数据框中重命名我的列

我需要找到现有列名称中的任何字符串,该字符串位于_TCO之间,然后是两位数字,然后是另一个_例如 TC017 TC034 然后我想用匹配替换现有列名(匹配后名称中有字符)。 我尝试使用$ 1进行比赛但是用字面意思取代了比赛 如何使用该列名称匹配来替换列名?

  names(totsMerge) <- gsub("(_TC0.+?_)",'$1',names(totsMerge))

例如,我想更改列名

 SLX.9397._HGD_TC070III_E_FLD0252.Read1_SND_QHGD_Apos.fq.gz 

 TC070III

1 个答案:

答案 0 :(得分:1)

尝试

 sub('.*?_(TC0\\d{2}[^_]*).*', '\\1', str1)
 #[1] "TC070III"

或者

 library(stringr)
 str_extract(str1, 'TC0\\d{2}[^_]*')
 #[1] "TC070III"

数据

 str1 <- 'SLX.9397._HGD_TC070III_E_FLD0252.Read1_SND_QHGD_Apos.fq.gz'