如何解决R中是否有相当于vb.net的instr
我正在用 R 重写我的 vb.net 代码,但遇到了障碍。 vb.net 中的代码实质上是计算字符串中未出现在允许字符字符串中的字符数。 vb.net中的代码是:
StringtoConvert="ABC"
strAllowedChars="AC"
For i= 1 to len(StringtoConvert)
If InStr(1,strAllowedChars,StringtoConvert(i))=0 then
disallowed=disallowed+1
Else
End If
Next
我可以看到如何在 R 中使用循环来搜索每个允许字符的字符串,但是在 R 中有没有办法使用像上面的 strAllowedChars 这样的聚合来做到这一点?
R 中 stringr 包的 str_count 函数是我发现的最接近的函数,但它看起来与整个 strAllowedChars 匹配,而不是独立查看每个字符。如何测试 StringtoConvert 以确保它仅包含 strAllowedChars 作为单个字符。换句话说,在上面的示例中,如果 StringtoConvert 中的一个字符与 strAllowedCharacters 中的一个字符不匹配,那么我需要将其标识为这样并使用另一个调用来替换它或直接替换它。
我尝试过的 R 代码是:
library(stringr)
testerstring<-"CYA"
testpattern<-"CA"
newtesterstring<-str_count(testerstring,testpattern)
print(newtesterstring)
所需的输出是 StringtoConvert 中基于允许的字符 strAllowedChars 不允许的字符数。然后,我将在循环中使用它,使用 if then 语句将任何不允许的字符更改为“G”,因此如果我可以跳过计数步骤,而只是将任何不允许的字符替换为“G”,那也是可取的。
解决方法
您可以使用 strsplit 获取 strAllowedChars 中的每个字符,然后从 StringtoConvert 中的总字符数中减去 StringtoConvert 中允许的字符数。
如果这是您所追求的,这将为您提供 StringtoConvert 中不允许使用的字符总数。
StringtoConvert <- "ABCrrrrr"
strAllowedChars <- "ACT"
disallowed <- nchar(StringtoConvert) - sum(stringr::str_count(StringtoConvert,strsplit(strAllowedChars,"")[[1]]))
disallowed
要用'G'替换所有允许的字符,你可以试试这个。
> StringtoConvert <- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
> strAllowedChars <- "ACT"
>
> stringr::str_replace_all(StringtoConvert,paste0("[^",strAllowedChars,"]"),"G")
[1] "AGCGGGGGGGGGGGGGGGGTGGGGGG"
,
这是使用 str_replace_all
的方法。我们可以生成一个正则表达式来识别不在集合中的字符。例如,[^AC]
匹配任何不是 A
或 C
的字符:
library(stringr)
StringtoConvert="ABC"
strAllowedChars="AC"
str_replace_all(StringtoConvert,"G")
#[1] "AGC"
set.seed(12345)
sample(LETTERS,50,replace = TRUE) %>% paste(collapse = "") -> StringtoConvert2
str_replace_all(StringtoConvert2,"G")
#[1] "GGGGGGGGGGGGGGGGGGAGGGGGCGGGGGGGGGGGGGGGGGGGGGGGGG"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。