匹配不同模式的正则表达式

时间:2018-06-13 15:49:23

标签: r regex

我有这个字符串

mys<-c("16_0-FA", "16_1-FA", "18_2-FA", "18_3-FA", "20_0-FA", "20_4-FA", 
       "16_0-GG", "16_1-GG", "18_2-GG", "18_3-GG", "20_0-GG", "20_4-GG",)

我想要分配不同的模式。第一个是-

之后的字母
sub('.*-', '', mys)

第二个是_-

之间的具体数字

>2==1

mys[as.numeric(gsub(".*_|-.*", "", mys))>2]

现在我想要结合并同时进行,我尝试了这种方法但不起作用。

sub('.*-'| mys[as.numeric(gsub(".*_|-.*", "", mys))>2], '', mys)

结果应该是

"18_3-FA" "20_4-FA"

1 个答案:

答案 0 :(得分:1)

如果您想要第二个组件的元素子集&gt; 2,然后第三个等于FA,然后创建一个3列数据框d,其中包含每个mys元素的3个组件,然后创建一个逻辑向量ok,表示各个组件是否满足这两个条件。然后由它子集。没有使用包裹。

d <- read.table(text = gsub("[_-]", " ", mys))
ok <- with(d, V2 > 2 & V3 == "FA")
mys[ok]
## [1] "18_3-FA" "20_4-FA"

如果您想要d行的子集,那么在定义d后,它就是:

subset(d, V2 > 2 & V3 == "FA")
##   V1 V2 V3
## 4 18  3 FA
## 6 20  4 FA