我遇到区分大小写的问题。我们可以把它关掉吗?
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
答案 0 :(得分:29)
没有办法关闭==
的区分大小写,但是将两个字符向量强制转换为大写,然后然后测试等式是否相同:
toupper(A1)
[1] "A" "A" "A" "A" "A" "A" "A"
toupper(A1)==toupper(B1)
# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
答案 1 :(得分:24)
正如Josh O'Brien所说。为了扩展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)
关闭无壳匹配:< / p>
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