我有两个长度相同的字符串。我想比较字符串元素并为每个索引返回TRUE或FALSE。例如:
string1 <- "abcd1234"
string2 <- "abcd1434"
result <- [T,T,T,T,T,F,T,T]
到目前为止,我有字符串,我通过取消列出它们创建了字符向量,但是到目前为止我还没有能够在R中获得任何字符串函数。我知道我可以使用for循环并做一个简单的==但我想知道是否有某种矢量化的方式来做到这一点。
str1 <- unlist(str_split(string1, ""))
str2 <- unlist(str_split(string2, ""))
还有一种情况,其中一个字符串将有_表示此字符本质上是一个通配符,并且不需要检查它是否相等。这就是为什么我试图在R中使用一个正则表达式的东西,所以我可以用通配符替换_。
string1 <- "abcd_234"
string2 <- "abcd1224"
result <- [T,T,T,T,T,T,F,T]
答案 0 :(得分:2)
apply(do.call(rbind, strsplit(c(string1, string2), "")), 2, function(x){
length(unique(x[!x %in% "_"])) == 1
})
#[1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE
您还可以稍微修改Rich的已删除答案
Reduce(f = function(s1, s2){
s1 == s2 | s1 == "_" | s2 == "_"
},
x = strsplit(c(string1, string2), ""))
#[1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE
请注意,第一种方法将允许比较两个以上的字符串
答案 1 :(得分:2)
这是蛮力方法。我是str_locate_all来查找两个字符串中的所有“_”并将这些值设置为True,以考虑问题的外卡特性。
library(stringr)
string1 <- "abcd_234"
string2 <- "abcd1224"
str1 <- str_split(string1, "")[[1]]
str2 <- str_split(string2, "")[[1]]
#compare characters one by one
result<- str1==str2
#Correct for wildcards in both strings
result[str_locate_all(string1, "_")[[1]][,1]]<-TRUE
result[str_locate_all(string2, "_")[[1]][,1]]<-TRUE
result
#[1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE
答案 2 :(得分:0)
我知道很久以前就已经回答了这个问题,但我想我会为所有 R 初学者提交一个方便的复制粘贴版本。所以这是@d.b 以更初学者友好的方式回答:
strComp1 = f.check.string.equality("TestStr", "teststr")
strComp2 = f.check.string.equality(tolower("TestStr"), "teststr")
然后,您只需使用要比较的输入字符串调用函数,如下所示:
strComp1$isEqual
> strComp1$isEqual
[1] FALSE
strComp1$charsResult
> strComp1$charsResult
[1] FALSE TRUE TRUE TRUE FALSE TRUE TRUE
strComp2$isEqual
> strComp2$isEqual
[1] TRUE
strComp2$charsResult
> strComp2$charsResult
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
...结果如下:
topBar: {
width: 100,
height: 20,
backgroundColor: '#735dd0',
marginTop: '5%',
marginLeft: '5%',
borderRadius: '5px',
}, dateClass: {
fontSize: '0.6em',
fontWeight: 'bold',
},
<GridList
<GridListTile
<GridListTileBar
className={classes.topBar}
title={<span className={classes.dateClass}>{picture.date}</span>}
titlePosition="top"
/>
</GridListTile>
</GridList>
...现在你终于是一个快乐的露营者了。 :)