我有一个名为myvec
的向量。我想删除第一个分隔符_
之前的所有内容以及最后一个分隔符_
之后的所有内容(包括分隔符)。如何在R中执行此操作以获取result
。
myvec <- c("contamination_LPH-001-10_3.txt", "contamination_LPH-001-10_AK1_0.txt",
"contamination_LPH-001-10_AK2_1.txt", "contamination_LPH-001-10_PD_2.txt",
"contamination_LPH-001-10_SCC_4.txt")
结果:
LPH-001-10, LPH-001-10_AK1,LPH-001-10_AK2,LPH-001-10_PD,LPH-001-10_SCC
答案 0 :(得分:3)
我们可以将gsub
用于此
gsub("^[^_]*_|_[^_]*$", "", myvec)
#[1] "LPH-001-10" "LPH-001-10_AK1" "LPH-001-10_AK2"
#[4] "LPH-001-10_PD" "LPH-001-10_SCC"
从字符串的开头(^
)开始,我们匹配的零个或多个字符不是_
([^_]*
),后跟_
或( |
)匹配_
后跟零个或多个不是_
([^_]*
)的字符,直到字符串的结尾($
)并替换它与""
。
或者我们也可以使用捕获组((...)
)并替换为捕获组的反向引用。
sub("^[^_]*_(.*)_[^_]*$", "\\1", myvec)
#[1] "LPH-001-10" "LPH-001-10_AK1" "LPH-001-10_AK2"
#[4] "LPH-001-10_PD" "LPH-001-10_SCC"