我是 R 的新手,并且仍然在学习,因此,我将非常感谢您的帮助或建议。
我有与以下相似的不同字符串:
"Department of Biophysical Chemistry, University of Braunschweig, Braunschweig, Germany; Consejo Superior de Investigaciones Científicas, CCHS, Madrid, Spain;"
然后,我只想提取这些字符串中的国家名称,包括分号,即:
"Germany; Spain;"
对我来说,问题是找出如何从最后一个昏迷中提取出分号,然后重复进行。我尝试了使用gsub函数,但是无法采取正确的方法。
答案 0 :(得分:1)
我们可以在此处尝试将strsplit
与sub
一起用于基本R选项:
x <- "Department of Biophysical Chemistry, University of Braunschweig, Braunschweig, Germany; Consejo Superior de Investigaciones Científicas, CCHS, Madrid, Spain;"
terms <- sapply(strsplit(x, ";\\s*")[[1]], function(x) {
sub("^.*\\s+", "", x)
})
output <- paste0(terms, ";", collapse=" ")
output
[1] "Germany; Spain;"
这里的逻辑是首先在模式;\s*
上分割用分号分隔的字符串,这将产生一个包含每个部门的列表。然后,我们使用apply
删除直到空白(包括空白)的所有内容。最后,我们粘贴折叠以生成另一个用分号分隔的字符串。
注意:我仅出于演示目的更改了输出向量的名称,因为R默认情况下使用完整的部门描述作为名称,因此很难显示。
答案 1 :(得分:1)
对于测试输入,请制作一个3分量向量s
,如末尾的注释所示,以便我们可以看到它适用于多行-这里只有三行。
现在,我们可以在gsubfn软件包中使用strapply
获得单线解决方案。我们匹配指示的模式,仅将匹配项返回到捕获组,即括号内的部分。然后,对于每一行,我们使用sapply
至paste
匹配项。
library(gsubfn)
sapply(strapply(s, ", ([^,;]+;)"), paste, collapse = " ")
给予:
[1] "Germany; Spain;" "Germany; Spain;" "Germany; Spain;"
s1 <- "Department of Biophysical Chemistry, University of Braunschweig, Braunschweig, Germany; Consejo Superior de Investigaciones Científicas, CCHS, Madrid, Spain;"
s <- c(s1, s1, s1)
答案 2 :(得分:0)
我只需找到;
之前的最后一个逗号,然后使用简单的gsub
调用就可以捕获所有逗号。这也适用于向量
gsub(".*?(=?[^,]*;)", "\\1", x, perl = TRUE)
# [1] " Germany; Spain;"