我遇到大小寫敏感問題。我們可以關閉它嗎?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
我遇到大小寫敏感問題。我們可以關閉它嗎?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
有沒有辦法關閉的==
區分大小寫,但強迫兩個特徵向量爲大寫和然後測試平等達同樣的事情:
toupper(A1)
[1] "A" "A" "A" "A" "A" "A" "A"
toupper(A1)==toupper(B1)
# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
正如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)
關閉區分大小寫匹配:
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
+1這是一個有趣和豐富的內容。如果你想使用'grepl'和_not_ accept substring匹配,我想你可以做'mapply(grepl,A1,C1,ignore.case = TRUE)&mapply(grepl,C1,A1,ignore.case = TRUE)' 。 –
@ JoshO'Brien:你的確可以,但是這個構造不太可能在效率上超越...... ;-) –
是的。而在高爾夫的代碼相反,它是一個競爭者! –