Подтвердить что ты не робот

Выключение чувствительности к регистру в r

У меня возникают трудности с чувствительностью к регистру. Можем ли мы отключить его?

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

4b9b3361

Ответ 1

Невозможно отключить чувствительность к регистру ==, но принуждение обоих векторов символов к верхнему регистру, а затем проверка на равенство составляет одно и то же:

toupper(A1)
[1] "A" "A" "A" "A" "A" "A" "A"

toupper(A1)==toupper(B1)
# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE

Ответ 2

Как сказал Джош О'Брайен. Чтобы расширить бит на несоответствие в 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