在r中关闭区分大小写

jon*_*jon 25 r case-sensitive

我遇到区分大小写的问题.我们可以把它关掉吗?

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
Run Code Online (Sandbox Code Playgroud)

应该是全部 TRUE

Jos*_*ien 30

没有办法关闭区分大小写==,但是将两个字符向量强制转换为大写,然后测试相等是否相同:

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

toupper(A1)==toupper(B1)
# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
Run Code Online (Sandbox Code Playgroud)


Jor*_*eys 24

正如约什奥布莱恩所说.为了扩展R中的无壳匹配,实际上可以使用正则表达式(使用例如grepgrepl)

在这种情况下,您可以使用mapplygrepl喜欢这样,只要您匹配单个字符:

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 
Run Code Online (Sandbox Code Playgroud)

你必须要小心,因为它也匹配像这样的部分字符串:

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  
Run Code Online (Sandbox Code Playgroud)

这可能是也可能不是你想要的.

在旁注中,如果您与正则表达式匹配并且您想忽略大小写,则还可以使用该构造(?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
Run Code Online (Sandbox Code Playgroud)