【发布时间】:2011-12-02 19:33:56
【问题描述】:
我在区分大小写方面遇到困难。我们可以关掉它吗?
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
【问题讨论】:
标签: 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
应该都是TRUE
【问题讨论】:
标签: r case-sensitive
没有办法关闭== 的大小写敏感性,但是将两个字符向量强制为大写和然后测试相等性等同于:
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
【讨论】:
grepl 并且 not 接受子字符串匹配,我想您可以使用 mapply(grepl,A1,C1,ignore.case=TRUE) & mapply(grepl,C1, A1,ignore.case=TRUE)。