假设我的数据集中有以下植物种类科学名称列表:
FullSpeciesNames <- c("Aronia melanocarpa (Michx.) Elliott", "Cotoneaster divaricatus Rehder & E. H. Wilson","Rosa canina L.","Ranunculus montanus Willd.")
我想获得一个简化名称列表,即只是给定名称的前两个元素,即:
SimpleSpeciesNames<- c("Aronia melanocarpa", "Cotoneaster divaricatus", "Rosa canina", "Ranunculus montanus")
如何在R?
中完成答案 0 :(得分:2)
我们可以使用sub
来匹配单词(\\w+
),后跟一个或多个空格(\\s+
),后跟另一个单词和空格,捕获为一个组,以及其余的字符(.*
)。在替换中,使用捕获的组的反向引用(\\1
)
trimws(sub("^((\\w+\\s+){2}).*", "\\1", FullSpeciesNames))
答案 1 :(得分:1)
在功能使用方面更复杂但不需要正则表达式的替代方案是
substring(FullSpeciesNames,
1, sapply(gregexpr(" ", FullSpeciesNames, fixed=TRUE), "[[", 2) - 1)
[1] "Aronia melanocarpa" "Cotoneaster divaricatus" "Rosa canina" "Ranunculus montanus"
gregexpr
可用于查找字符串中某些字符的位置(它还可以查找带有正则表达式的模式)。我们在这里寻找空间。它返回字符向量中每个字符串的位置列表。 sapply
用于提取第二个空间的位置。这些位置的矢量(减1)被馈送到substring
,它通过初始向量并从第一个字符开始到指定位置。