首页 > 解决方案 > 如何从R中的字符串中获取部分文本?

问题描述

我正在研究母语如何影响出版。我已经从 Web of Science 下载了 BibTeX,并使用 bibliometrix 包将其导入到 R 中。此数据框中有一列指示作者的地址。例如:

[1] "SEGALLA, R (CORRESPONDING AUTHOR), INST FED EDUC CIENCIA \\& TECNOL MATO GROSSO, CAMPUS CACERES PROF OLEGARIO BALDO, BR-78201382 VILA REAL DIST IND, CACERES, BRAZIL.; SEGALLA, ROSANE, INST FED EDUC CIENCIA \\& TECNOL MATO GROSSO, CAMPUS CACERES PROF OLEGARIO BALDO, BR-78201382 VILA REAL DIST IND, CACERES, BRAZIL.; SEGALLA, ROSANE; CERDEIRA MORELLATO, LEONOR PATRICIA, UNIV ESTADUAL PAULISTA UNESP, INST BIOCIENCIAS, DEPT BIODIVERSIDADE, LAB FENOL, RIO CLARO, BRAZIL.; PINHEIRO, FABIO, UNIV ESTADUAL CAMPINAS, INST BIOL, DEPT BIOL VEGETAL, CAMPINAS, BRAZIL."

我有一个包含联合国接受的所有国家名称的向量,如下所示:

  [1] "Afghanistan"                      "Angola"                          

等等...

我需要做的是提取作者地址所在国家/地区的名称。考虑上面的例子,我需要获取巴西,巴西,巴西,但我不知道具体怎么做。我曾尝试使用 grep 和 str_extract 但没有成功。此外,我需要对我的数据框的每次观察都执行此操作,该数据框有超过 2k 个观察值。

标签: rregex

解决方案


txt <- "SEGALLA, R (CORRESPONDING AUTHOR), INST FED EDUC CIENCIA \\& TECNOL MATO GROSSO, CAMPUS CACERES PROF OLEGARIO BALDO, BR-78201382 VILA REAL DIST IND, CACERES, BRAZIL.; SEGALLA, ROSANE, INST FED EDUC CIENCIA \\& TECNOL MATO GROSSO, CAMPUS CACERES PROF OLEGARIO BALDO, BR-78201382 VILA REAL DIST IND, CACERES, BRAZIL.; SEGALLA, ROSANE; CERDEIRA MORELLATO, LEONOR PATRICIA, UNIV ESTADUAL PAULISTA UNESP, INST BIOCIENCIAS, DEPT BIODIVERSIDADE, LAB FENOL, RIO CLARO, BRAZIL.; PINHEIRO, FABIO, UNIV ESTADUAL CAMPINAS, INST BIOL, DEPT BIOL VEGETAL, CAMPINAS, BRAZIL."
countries <- c("Afghanistan", "Angola", "Brazil")

ptn <- paste0("\\b(", paste(countries, collapse = "|"), ")\\b")
ptn
# [1] "\\b(Afghanistan|Angola|Brazil)\\b"

regmatches(txt, gregexpr(ptn, txt, ignore.case = TRUE))
# [[1]]
# [1] "BRAZIL" "BRAZIL" "BRAZIL" "BRAZIL"

推荐阅读