不区分大小写的R中列表的搜索

SFu*_*n28 31 r

我可以在字符列表中搜索字符串,我不知道该字符串是如何装入的吗?或者更一般地说,我正在尝试引用数据框中的列,但我不确切知道列是如何填充的.我的想法是以names(myDataFrame)不区分大小写的方式搜索以返回列的正确外壳.

Far*_*rel 42

我建议使用这个grep()函数和一些额外的参数,这些参数使得它很愉快.

grep("stringofinterest",names(dataframeofinterest),ignore.case=TRUE,value=TRUE)
Run Code Online (Sandbox Code Playgroud)

如果没有参数,value=TRUE您将只获得匹配发生的索引位置向量.


Ani*_*iko 32

假设没有变量名称仅在大小写上有所不同,您可以在以下位置搜索全小写变量名称tolower(names(myDataFrame)):

match("b", tolower(c("A","B","C")))
[1] 2
Run Code Online (Sandbox Code Playgroud)

这只会产生完全匹配,但在这种情况下可能是理想的.


use*_*745 6

对于任何将其与 一起使用的人,只需在右侧(或两侧)%in%使用,如下所示:tolower

"b" %in% c("a", "B", "c")
# [1] FALSE

tolower("b") %in% tolower(c("a", "B", "c"))
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)


MrF*_*ick 5

使用该stringr包,您可以使用其中一个内置修饰符函数修改模式(请参阅"?修饰符").例如,因为我们匹配固定字符串(没有特殊的正则表达式字符)但想要忽略大小写,我们可以这样做

str_detect(colnames(iris), fixed("species", ignore_case=TRUE))
Run Code Online (Sandbox Code Playgroud)

或者您可以使用(?i)不区分大小写的修饰符

str_detect(colnames(iris), "(?i)species")
Run Code Online (Sandbox Code Playgroud)

  • 来自`?stringr :: modifiers`的所有修饰符都将`ignore.case`作为第二个参数,所以这里例如你可以输入`str_detect(colnames(iris),fixed("species",ignore_case = TRUE)) (2认同)
  • `grepl`用`perl = TRUE`:`grepl("(?i)species",colnames(iris),perl = TRUE)` (2认同)