Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用tidyverse检查一个字符向量与另一个字符向量的元素的更好解决方案?_R_Tidyverse_String Comparison_Purrr - Fatal编程技术网

使用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这正是我要做的…:)