首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用正则表达式将载体分裂成数据

用正则表达式将载体分裂成数据
EN

Stack Overflow用户
提问于 2016-11-17 20:47:25
回答 1查看 37关注 0票数 0

我有一个像这样的向量

代码语言:javascript
复制
head(val)
[1] "PD2323 [403-407]"   "P05230 [455-459]"

我想把它分割成3列多行的数据格式。输出应该如下所示:

代码语言:javascript
复制
head(output)
              [,1]       [,2]       [,3]       
    [1,] "P20700"         403        407
    [2,] "P05787"         455        459
    [3,] "O14641"         168        178

然而,当我尝试设置它时,我最终得到了一个包含3列以上的矩阵。

代码语言:javascript
复制
head(strsplit(val, "\\s+"))

[[1]]
[1] "PD2323"    "[403-407]"

[[2]]
[1] "P05230"    "[455-459]"

[[3]]
[1] "AS14641"    "[168-178]"

[[4]]
[1] "SS7Z3Z4"    "[424-428]"

[[5]]
[1] "QQN4C6-2"  "[671-679]"

[[6]]
[1] "DD9Y3B2" "[7-13]

一开始看上去很有希望,

代码语言:javascript
复制
do.call(rbind, head(strsplit(val, "\\s+")))
     [,1]       [,2]       
[1,] "PD2323"   "[403-407]"
[2,] "P05230"   "[455-459]"
[3,] "AS14641"   "[168-178]"
[4,] "SS7Z3Z4"   "[424-428]"
[5,] "QQN4C6-2" "[671-679]"
[6,] "DD9Y3B2"   "[7-13]"   

如果我现在删除head函数,就会得到一些有90列的东西,原因是

代码语言:javascript
复制
dim(do.call(rbind, strsplit(val, "\\s+")))

[1] 23369    90
Warning message:
In .Method(..., deparse.level = deparse.level) :
  number of columns of result is not a multiple of vector length (arg 314)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-17 20:50:00

我们可以使用gsub删除方括号和-,并将其读入带有read.tabledata.frame

代码语言:javascript
复制
d1 <- read.table(text=gsub("[][]|-", " ", val), header=FALSE, stringsAsFactors=FALSE)
d1 
#    V1  V2  V3
#1 PD2323 403 407
#2 P05230 455 459

数据

代码语言:javascript
复制
val <- c( "PD2323 [403-407]",   "P05230 [455-459]")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40664709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档