R中的'which'命令,不区分大小写

时间:2014-11-23 04:30:53

标签: r which

我试图在数据框中找到包含某个字符串的索引。但我希望我的字符串不区分大小写。 说,我想在名为COLUMN73的数据框中搜索列号,我希望它返回73,因为它是第七十三列。我有,

which(names(mydata) == "COLUMN73")

是否可以使我的搜索字符串不区分大小写,以便即使我搜索说CoLumN73也能得到73?

感谢。

3 个答案:

答案 0 :(得分:7)

您可以使用grepl参数

使用ignore.case对其进行索引
x <- c("col7", "COL73", "Col17", "CoL73", "cOl73")
grepl("col73", x, ignore.case=TRUE)
# [1] FALSE  TRUE FALSE  TRUE  TRUE

同样,grep返回数字索引

grep("col73", x, ignore.case=TRUE)
# [1] 2 4 5

对于数据框列子集

df[grepl("col73", names(df), ignore.case=TRUE)]

答案 1 :(得分:6)

您可以将您的名字转换为大写

which(toupper(names(mydata)) == "COLUMN73")

答案 2 :(得分:0)

完整编辑,修正了Will的代码。感谢David Arenburg指出这一点。

x <- rep(c("col7", "COL73", "Col17","COLUMN73", "CoL73", "cOl73"),1e4)
scriven<- function(x) grepl("COLUMN73", x, ignore.case=TRUE)
will<-function(x) which(toupper((x)) == "COLUMN73")
microbenchmark(scriven(x),will(x))
Unit: milliseconds
       expr      min       lq   median       uq      max neval
 scriven(x) 30.55911 33.04852 34.91243 37.01039 39.59833   100
    will(x) 26.10728 26.47967 27.21592 28.76291 30.46163   100