R 查找列名并将其替换为查找中的匹配项
我正在尝试重命名数据框中名为totsMerge的列 我需要在现有列名中找到任何介于TCO、两位数字和另一位数字之间的字符串,例如TC017或TC034 然后,我想用匹配项替换现有列名(此匹配项后面的名称中有字符)。 我试着用1美元来比赛,但是它用这个来代替比赛 如何用该列名中的匹配项替换该列名R 查找列名并将其替换为查找中的匹配项,r,R,我正在尝试重命名数据框中名为totsMerge的列 我需要在现有列名中找到任何介于TCO、两位数字和另一位数字之间的字符串,例如TC017或TC034 然后,我想用匹配项替换现有列名(此匹配项后面的名称中有字符)。 我试着用1美元来比赛,但是它用这个来代替比赛 如何用该列名中的匹配项替换该列名 names(totsMerge) <- gsub("(_TC0.+?_)",'$1',names(totsMerge)) 到 试一试 或 数据 str1我在上面添加了一个示例。非常感谢much
names(totsMerge) <- gsub("(_TC0.+?_)",'$1',names(totsMerge))
到
试一试
或
数据
str1我在上面添加了一个示例。非常感谢much@user3632206没问题。很高兴帮助你我想知道为什么OPs代码不起作用。例如,str\u extract(str1,“(\u TC0.+?)”)
几乎会给出所需的结果,为什么它没有给出与sub相同的输出(“(\u TC0.+?”,“\\1',str1)
?@davidernburg我认为一个原因是它可能与字符串的开头不匹配,因为\u TCO.
不是起始字符。第二个+
也可以包括\uu
,其中有多个\u
。虽然它在两端都有
的情况下工作(“.*”(“\\TC0[^\u]*..*”,“\\ 1',str1)
。@davidernburg它正确匹配提取,但替换失败。使用str_replace
,str_replace(str1,“([u TC0.+?)”,“\\1”)
另一个不太复杂的示例是v1
SLX.9397._HGD_TC070III_E_FLD0252.Read1_SND_QHGD_Apos.fq.gz
TC070III
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'