gpt4 book ai didi

regex - R 中按条件分割字符串

转载 作者:行者123 更新时间:2023-12-02 04:20:22 24 4
gpt4 key购买 nike

我有这个带有分隔符_mystring。这里的条件是,如果有两个或多个分隔符,我想在第二个分隔符处拆分,如果只有一个分隔符,我想在 ".Recal" 处拆分并获取 结果如下所示。

mystring<-c("MODY_60.2.ReCal.sort.bam","MODY_116.21_C4U.ReCal.sort.bam","MODY_116.3_C2RX-1-10.ReCal.sort.bam","MODY_116.4.ReCal.sort.bam")

结果

"MODY_60.2"  "MODY_116.21" "MODY_116.3"  "MODY_116.4"

最佳答案

您可以使用gsubfn来做到这一点

library(gsubfn)
f <- function(x,y,z) if (z=="_") y else strsplit(x, ".ReCal", fixed=T)[[1]][[1]]
gsubfn("([^_]+_[^_]+)(.).*", f, mystring, backref=2)
# [1] "MODY_60.2" "MODY_116.21" "MODY_116.3" "MODY_116.4"

这允许您有两个以上“_”的情况,并且您想拆分第二个“_”,例如,

mystring<-c("MODY_60.2.ReCal.sort.bam",
"MODY_116.21_C4U.ReCal.sort.bam",
"MODY_116.3_C2RX-1-10.ReCal.sort.bam",
"MODY_116.4.ReCal.sort.bam",
"MODY_116.4_asdfsadf_1212_asfsdf",
"MODY_116.5.ReCal_asdfsadf_1212_asfsdf", # split by second "_", leaving ".ReCal"
"MODY")

gsubfn("([^_]+_[^_]+)(.).*", f, mystring, backref=2)
# [1] "MODY_60.2" "MODY_116.21" "MODY_116.3" "MODY_116.4"
# [5] "MODY_116.4" "MODY_116.5.ReCal" "MODY"

在函数中,fx是原始字符串,yz是接下来的匹配。因此,如果 z 不是“_”,那么它将继续按替代字符串进行拆分。

关于regex - R 中按条件分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31931954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com