我是R的新手并且还在学习,所以我非常感谢任何帮助或建议。
我有不同的字符串类似于:
"Department of Biophysical Chemistry, University of Braunschweig, Braunschweig, Germany; Consejo Superior de Investigaciones Científicas, CCHS, Madrid, Spain;"
然后我想只提取这些字符串中的国家名称,包括分号,即:
"Germany; Spain;"
我的问题是找出如何从最后一个昏迷中提取分号并重复这样做。我尝试使用gsub功能,但我无法做出正确的方法..
对于测试输入,在最后的注释中创建一个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)
我们可以尝试在这里使用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使用完整的部门描述作为名称,因此很难显示。
我只是在;
之前找到最后一个逗号,并使用简单的gsub
调用捕获所有内容。这也适用于矢量
gsub(".*?(=?[^,]*;)", "\\1", x, perl = TRUE)
# [1] " Germany; Spain;"