大文字と小文字の区別に問題があります。オフにできますか?
A1 <- c("a", "A", "a", "a", "A", "A", "a")
B1 <- c(rep("a", length(A1)))
A1 == B1
# [1] TRUE FALSE TRUE TRUE FALSE FALSE TRUE
すべてTRUE
である必要があります
==
の大文字と小文字の区別をオフにする方法はありませんが、両方の文字ベクトルを大文字に変換し、thenをテストすると、等しいかどうかは同じになります。
toupper(A1)
[1] "A" "A" "A" "A" "A" "A" "A"
toupper(A1)==toupper(B1)
# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
ジョシュ・オブライエンが言ったように。 Rで大文字と小文字を区別しないマッチングを少し拡張するには、正規表現で実際に可能です(例:grep
とgrepl
を使用)
この場合、mapply
とgrepl
を次のように使用できます。
A1 <- c("a", "A", "a", "a", "A", "A", "a")
B1 <- c(rep("a", length(A1)))
mapply(grepl,A1,B1,ignore.case=TRUE)
# a A a a A A a
# TRUE TRUE TRUE TRUE TRUE TRUE TRUE
ただし、次のような部分文字列にも一致するため、注意が必要です。
C1 <- rep('ab',length(A1))
mapply(grepl,A1,C1,ignore.case=TRUE)
# a A a a A A a
# TRUE TRUE TRUE TRUE TRUE TRUE TRUE
これは必要な場合とそうでない場合があります。
補足として、正規表現と照合して大文字と小文字を区別したくない場合は、(?i)
構文を使用して大文字と小文字を区別しないマッチングをオンにし、(?-i)
を使用して大文字と小文字を区別しないマッチングをオフにすることもできます。
D1 <- c('abc','aBc','Abc','ABc','aBC')
grepl('a(?i)bc',D1) # caseless matching on B and C
# [1] TRUE TRUE FALSE FALSE TRUE
grepl('a(?i)b(?-i)c',D1) # caseless matching only on B
# [1] TRUE TRUE FALSE FALSE FALSE