【问题标题】:Why can't I extract text between patterns with varying text length为什么我不能在文本长度不同的模式之间提取文本
【发布时间】:2016-08-14 18:59:33
【问题描述】:

我在数据框中有一列,其中包含需要拆分为列的字符。当列中的字符串长度为 12 时,我的代码似乎会中断,但当字符串长度为 11 时,它可以正常工作。

S99.ABCD{T}
S99.ABCD{V}
S99.ABCD{W}
S99.ABCD{Y}
Q100.ABCD{A}
Q100.ABCD{C}
Q100.ABCD{D}
Q100.ABCD{E}

左侧是理想格式的示例,右侧是我得到的:

ID    WILD RES MUT | ID    WILD RES MUT
ABCD  S    99  T   | ABCD  S    99  T
...                | ...
ABCD  Q    100 A   | .ABC  Q    100 { 
...                | ...

我目前的解决方案如下:

    data <- data.frame(ID = substr(mdata$substitution,
                                   gregexpr(pattern = "\\.",
                                   mdata$substitution)[[1]] + 1,
                                   gregexpr(pattern = "\\{",
                                   mdata$substitution)[[1]] - 1),
                       WILD = substr(mdata$substitution, 0, 1),
                       RES = gsub("[^0-9]","", mdata$substitution),
                       MUT = substr(mdata$substitution,
                                    gregexpr(pattern = "\\{",
                                    mdata$substitution)[[1]] + 1,                                    
                                    gregexpr(pattern = "\\}",
                                    mdata$substitution)[[1]] - 1))

我不确定为什么我的代码不起作用,我认为使用 gregexpr 可以找到模式在字符串中的位置,以找出我想要提取的字符的位置,但它不起作用当字符串的长度发生变化时。

【问题讨论】:

  • read.table(text = gsub('(\\D+)(\\d+)\\.(\\w+)\\{(\\w)\\}', '\\3 \\1 \\2 \\4', dd$V1))

标签: regex r


【解决方案1】:

使用这个例子你可以做你想做的事

test=c("S99.ABCD{T}",
       "S99.ABCD{V}",
       "S99.ABCD{W}",
       "S99.ABCD{Y}",
       "Q100.ABCD{A}",
       "Q100.ABCD{C}",
       "Q100.ABCD{D}",
       "Q100.ABCD{E}")
library(stringr)
test=str_remove(test,pattern = "\\}")
testdf=as.data.frame(str_split(test,pattern = "\\.|\\{",simplify = T))
testdf$V4substring(testdf$V1, 1, 1)                   
testdf$V5=substring(testdf$V1, 2)

【讨论】:

    猜你喜欢
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 2014-08-07
    • 2013-08-04
    • 2012-02-10
    • 2019-01-18
    • 2016-08-16
    相关资源
    最近更新 更多