使用tidyverse检查一个字符向量与另一个字符向量的元素的更好解决方案?
你好使用tidyverse检查一个字符向量与另一个字符向量的元素的更好解决方案?,r,tidyverse,string-comparison,purrr,R,Tidyverse,String Comparison,Purrr,你好 我的目标是比较两个字符向量——主要是同义词,另一个是混合名称。mixnames中的字符串元素与同义词中的元素不完全匹配,因此需要进行一些字符串比较。我的目标是提取同义词中的元素,这些元素与mixnames中的元素类似。我试着只用tidyverse来做这件事,但失败了。我找到了一个使用base的解决方案。我知道有更好的办法,但我想不出来 库(tidyverse) #>警告:包“ggplot2”是在R版本3.6.1下生成的 #>警告:程序包“tidyr”是在R版本3.6.1下构建的 #>警告:
我的目标是比较两个字符向量——主要是同义词,另一个是混合名称。mixnames中的字符串元素与同义词中的元素不完全匹配,因此需要进行一些字符串比较。我的目标是提取同义词中的元素,这些元素与mixnames中的元素类似。我试着只用tidyverse来做这件事,但失败了。我找到了一个使用base的解决方案。我知道有更好的办法,但我想不出来
库(tidyverse)
#>警告:包“ggplot2”是在R版本3.6.1下生成的
#>警告:程序包“tidyr”是在R版本3.6.1下构建的
#>警告:程序包“dplyr”是在R版本3.6.1下生成的
#乙偏啡
同义词看起来您希望同义词
向量中没有与混合名称
重叠的值。您可以对同义词进行子集以删除匹配项。这里stru_c
/粘贴折叠mixNames
创建一个包含所有mixNames
的模式。然后您只需使用部分字符串匹配(即,str_detect
和grepl
)
这里使用的是stringr
——稍微整洁一点
synonyms[str_detect(synonyms, str_c(mixNames, collapse = "|"), negate = T)]
或使用base R中的函数:
synonyms[!grepl(paste(mixNames, collapse = "|"), synonyms)]
# OR
grep(paste(mixNames, collapse = "|"), synonyms, value = T, invert = T)
作为站点提示,如果您想查看匹配字符串的其他方法,请查看stringdist
或其他字符串距离函数/包 我喜欢为这样的东西构建一个%g%
操作符。以下内容创建了一个TIBLE,其中包含实际工作的代码中的值:
库(tidyverse)
`%g%`A tibble:19 x 1
#>syn
#>
#>1小儿科
#>2佩多兰单宁
#>3 Perfagan
#>4费纳芬
#>5非那芬W/可待因
#>6菲尼平
#>7菲戈格兰丁
#>8松树
#>9吡拉明
#>10吡那醇
#>11普利塞特
#>12波尔莫芬
#>13普雷迪莫
#>14先兆
#>15普罗多尔
#>16普罗蒂纳
#>17普洱醇
#>18普尔莫芬
#>19热原C
类似地,要仅获取同义词中与混合名称中的值匹配的药物,请执行以下操作:
tibble(syn=同义词)%>%
筛选器(同步%g%mixNames)
#>#tible:2 x 1
#>syn
#>
#>1-5
#>2.Percocet Demi
由(v0.3.0)于2019-10-29创建。是否要从同义词
向量(即“Percocet-5”“Percocet-Demi”
)中删除匹配项,并返回剩余的同义词
向量?@Andrew这正是我要做的…:)