【发布时间】: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))