我有这个字符串
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"
答案 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