通过R中的向量循环,删除包含高于特定限制的图案的对象

通过R中的向量循环,删除包含高于特定限制的图案的对象,r,regex,loops,vector,R,Regex,Loops,Vector,试图找出如何循环通过一个向量并消除包含超过预定限制的特定模式的组件。例如,在下面的向量中,我可能只想保留“a_a_”和“b_b_”组件的前两个实例 x <- c("a_a_a", "a_a_b", "a_a_c", "a_a_d", "b_b_a", "b_b_b", "b_b_c", "b_b_d") 棘手的部分是,代码必须首先检测模式中包含的内容,然后通过(非常长的)向量循环找到所有匹配的模式,并建立一种计数实例的方法,这样一旦达到给定的级别,就可以消除此后的所有匹配组件 非常感谢您

试图找出如何循环通过一个向量并消除包含超过预定限制的特定模式的组件。例如,在下面的向量中,我可能只想保留“a_a_”和“b_b_”组件的前两个实例

x <- c("a_a_a", "a_a_b", "a_a_c", "a_a_d", "b_b_a", "b_b_b", "b_b_c", "b_b_d")
棘手的部分是,代码必须首先检测模式中包含的内容,然后通过(非常长的)向量循环找到所有匹配的模式,并建立一种计数实例的方法,这样一旦达到给定的级别,就可以消除此后的所有匹配组件


非常感谢您的帮助

您可以使用
grep
来确定哪些元素具有模式,并且只保留前两种模式

patterns = c("a_a", "b_b")
keep = NULL
for(p in patterns) { keep = c(keep, grep(p,x)[1:2]) }
x = x[keep]
x
[1] "a_a_a" "a_a_b" "b_b_a" "b_b_b"

谢谢这几乎是全部。我需要做的另一件事是循环遍历向量并实际检测我需要使用的模式,就像这样:patterns=grep(“”,x,value=TRUE),但我想我可以从这里找到答案。无论如何我都要试试。再次感谢。这些模式总是以字母下划线的形式出现吗?是的,基本上是字母下划线。我找到了所需的gsub正则表达式:
gsub(“[A-Za-z]*”*-*[A-Za-z]*$,”,x)
patterns = c("a_a", "b_b")
keep = NULL
for(p in patterns) { keep = c(keep, grep(p,x)[1:2]) }
x = x[keep]
x
[1] "a_a_a" "a_a_b" "b_b_a" "b_b_b"