识别R向量中的特定元素顺序模式

问题描述

我有一个向量列表,每个向量看起来像这样

c(“日本”,“美国”,“国家”,“日本”,“来源”,“国家”,“英国”,“来源”,“国家”,“美国”)

我的任务是在第一个c(“ source”,“ country”)之后提取国家名称,因此在此示例中,“ UK”将是要提取的国家名称。在所有向量中,c(“ source”,“ country”)后面都会有一个国家名称,因此我只需要在第一个c(“ source”,“ country”)之后提取元素。

解决方法

我们可以在此处尝试使用粘贴折叠正则表达式方法:

v <- c("Japan","USA","country","Japan","source","UK","USA")
terms <- paste(v,collapse="|")
country <- sub("^.*?\\|source\\|country\\|(.*?)\\|.*$","\\1",terms)
country

[1] "UK"

此处使用的方法是形成用管道分隔的术语列表,如下所示:

Japan|USA|country|Japan|source|country|UK|source|country|USA

然后,我们搜索第一个|source|country|出现的位置,并保留紧随其后的术语。

,

您可以使用以下内容找到sourcecountry之前的位置的第一个索引并添加2:

x <- c("Japan","USA")

x[which((x == "source")[-length(x)] & (x == "country")[-1])[1] + 2]
# [1] "UK"