只需要grepl
的帮助,它就是我的头脑!
我有两个变量:
str1<-"AAV.L"
str2<-"AAV2.L"
我想要做的是检查str2
是str1
的扩展名(在这种情况下是这样)。基本上,str2
在其名称中有一个额外的"2"
..
理想情况下,解决方案类似于:
grepl(str1,paste0(str2,...))
但我不知道在.
中考虑str1
。变量的长度也不一样,所以我不能只检查str1
中str2
的前3个字符是否存在。
有人有什么想法吗?
谢谢!
编辑 - 澄清..
基本上是“扩展”我的意思是如果一个变量包含完全相同的字母,而且更多,按相同的顺序。因此,上面的示例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
,这会使设置此值难以置信..
如果有帮助,请告诉我。
答案 0 :(得分:0)
您可以在放入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)
## TRUE