我有一个大的数据框架,其中一列& scientificName"有不同的学名和他们的作者。其中一些名字是混合的,用"×"在前面(注意,这是乘法符号x,而不是标准文本x)。有些混合动力车在名称的第一个单词前面有这个符号,但我只对那些在第二个单词前面有这个符号的人感兴趣(例如"Rosa ×obtusa Ripart"我要做的是浏览"物种"一栏并删除第二个单词开头的所有符号,并将_x(纯文本"x")附加到同一单词的结尾,即
Rosa ×obtusa Ripart ->Rosa obtusa_x Ripart
我从
开始df$scientificName[str_detect(df$scientificName, "×")]
,但我把自己绑在结里,试图只选择第二个单词,更不用说删除和添加字符了。
感谢您的帮助!这里的玩具数据集(只有第三个条目应该被修改):
df <- data.frame(stuff=c("hybrids", "are", "annoying"), scientificName=c("×Conyzigeron huelsenii (Vatke) Rauschert","Viola wittrockiana Koppert", "Rosa ×obtusa Ripart"))
使用sub
,您可以尝试:
sub('^(\w+)\s(×)(\w+)', '\1 \3_x', df$scientificName)
#[1] "×Conyzigeron huelsenii (Vatke) Rauschert"
#[2] "Viola wittrockiana Koppert"
#[3] "Rosa obtusa_x Ripart" `
对于第二个单词中包含×
的字符串,提取×
之后的字符并将_x
附加到它们后面,从中删除×
。