我可以在字符列表中搜索字符串,我不知道该字符串是如何装入的吗?或者更一般地说,我正在尝试引用数据框中的列,但我不确切知道列是如何填充的。我的想法是以不区分大小写的方式搜索names(myDataFrame)
以返回列的正确大小。
答案 0 :(得分:37)
我建议使用grep()
函数及其一些额外的参数来使用它。
grep("stringofinterest",names(dataframeofinterest),ignore.case=TRUE,value=TRUE)
没有参数value=TRUE
,您将只获得匹配发生的索引位置向量。
答案 1 :(得分:26)
假设没有变量名称仅在大小写上有所不同,您可以在tolower(names(myDataFrame))
中搜索全小写变量名称:
match("b", tolower(c("A","B","C")))
[1] 2
这只会产生完全匹配,但在这种情况下可能需要这样做。
答案 2 :(得分:5)
使用stringr
包,您可以使用其中一个内置修饰符函数修改模式(请参阅`?修饰符)。例如,因为我们匹配固定字符串(没有特殊的正则表达式字符)但想要忽略大小写,我们可以做
str_detect(colnames(iris), fixed("species", ignore_case=TRUE))
或者您可以使用(?i)
不区分大小写的modifier
str_detect(colnames(iris), "(?i)species")
答案 3 :(得分:1)
创建searchable
包是为了允许在对象中进行各种类型的搜索:
l <- list( a=1, b=2, c=3 )
sl <- searchable(l) # make the list "searchable"
sl <- ignore.case(sl) # turn on case insensitivity
> sl['B']
$b
[1] 2
它适用于列表和向量,并且比简单的不区分大小写的匹配做得更多。
答案 4 :(得分:1)
对于将%in%
与tolower
一起使用的任何人,只需在右侧(或两侧)使用"b" %in% c("a", "B", "c")
# [1] FALSE
tolower("b") %in% tolower(c("a", "B", "c"))
# [1] TRUE
,就像这样:
import Random
randindx = Random.sample(arr.between(0, dataframe['Col B'].size), dataframe['Col B'].size//20)
答案 5 :(得分:0)
如果你想在另一组字符串中搜索一组字符串,不区分大小写,你可以尝试:
s1 = c("a", "b")
s2 = c("B", "C")
matches = s1[ toupper(s1) %in% toupper(s2) ]
答案 6 :(得分:0)
实现此目的的另一种方法是使用str_which(string, pattern)
包中的stringr
:
library("stringr")
str_which(string = tolower(colnames(iris)), pattern = "species")