我有一个称为myvec
的向量。我想用“_
”替换每个元素中的前两个点(如果存在于-
之前)。如何在R中做到这一点并获得结果?
myvec <- c("SKDP.209.3_C4UAMACXX.7.04.ReCal.sort.bam", "SKDP.97.1_C4UAMACXX.7.12.ReCal.sort.bam",
"SKDP972_C4UAMACXX.7.13.ReCal.sort.bam")
结果
SKDP-209-3_C4UAMACXX.7.04.ReCal.sort.bam, SKDP-97-1_C4UAMACXX.7.12.ReCal.sort.bam,
SKDP972_C4UAMACXX.7.13.ReCal.sort.bam
最佳答案
我们可以尝试使用gsub
。使用捕获组(即放置在(...)
中的字符),再检查一个不是.
的字符(([^.]+)
),然后是一个点(\\.
为.
是可以与任何字符匹配的元字符,我们需要对其进行转义),然后是另一组不是点的捕获组,然后是点,然后是第三组捕获组,其中包括一个或多个不是_
的字符,然后是_
(([^_]+_
),其余字符直到字符串的结尾(.*
)并用捕获组的反向引用替换,即第一个捕获组的\\1
,然后是-
然后是第二个反向引用...
gsub("^([^.]+)\\.([^.]+)\\.([^_]+_.*)", "\\1-\\2-\\3", myvec)
#[1] "SKDP-209-3_C4UAMACXX.7.04.ReCal.sort.bam"
#[2] "SKDP-97-1_C4UAMACXX.7.12.ReCal.sort.bam"
#[3] "SKDP972_C4UAMACXX.7.13.ReCal.sort.bam"