只要帮我处理一下grepl,它就让我头疼了!
我有两个变量:
str1<-"AAV.L"
str2<-"AAV2.L"我想要做的是检查str2是否是str1的扩展(在本例中是这样的)。基本上,这里str2有一个额外的"2"在它的名字。
理想情况下,解决方案如下:
grepl(str1,paste0(str2,...))但我不知道如何解释. in str1。变量的长度也不一样,所以我不能只检查str1的前3个字符是否存在于str2中。
有人有什么想法吗?
谢谢!
编辑-澄清。
基本上,“扩展”,我的意思是,如果一个变量包含完全相同的字母,更多,以相同的顺序。因此,上面的示例AAV.L和AAV2.L将匹配,因为它包含AAV..L。但是,它不必是这样的,它应该与REWR和REWRLE相匹配,也就是REWR..。
所以c("AAV.LE", "BAAV.L","AABV.L","AAV..L","ABCAV.L"),没有人能比得上。如果我把比赛的规则写成通俗易懂的话,那就是:
str2从str1开始还是str2从str1的任何子集开始,以其他子集结束?
我已经看过agrep,但它匹配得太不准确了。例如,AAV.L和AAV2.L匹配很好,但是ADD和APUAD也匹配,这是不正确的!我知道我可以指定max.distance,但是有些字符串可能是ADD和ADDDDDDDDD,这使得设置这个值不太可能。
如果这有帮助的话请告诉我。
发布于 2014-01-30 04:07:27
您可以在放置grepl之前删除点扩展。
str1 <- sub("\\.[[:alnum:]]+$", "", str1);
## AAV
str2 <- sub("\\.[[:alnum:]]+$", "", str2);
## AAV2注意:这是一种删除文件扩展名的方法。它不会删除任何其他出现的点字符。它的工作方式是替换一个句点的出现,后面跟着字母数字字符,然后从字符串的末尾进行搜索。它用空("")字符串替换它。
str3 <- "A.A.V.L"
str3 <- sub("\\.[[:alnum:]]+$", "", str3);
## A.A.V然后,使用grepl
grepl(str1, str2)
## TRUEhttps://stackoverflow.com/questions/21447408
复制相似问题