问题描述
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|
出现的位置,并保留紧随其后的术语。
您可以使用以下内容找到source
在country
之前的位置的第一个索引并添加2:
x <- c("Japan","USA")
x[which((x == "source")[-length(x)] & (x == "country")[-1])[1] + 2]
# [1] "UK"