使用grepl&;查找单元格;哪一个

使用grepl&;查找单元格;哪一个,r,regex,readxl,R,Regex,Readxl,我试图在data.frame中查找以给定模式开头的单元格(我需要搜索行和列)。data.frames来自由readxl软件包读取的excel工作簿。模式的位置因工作簿而异。因此,在工作簿1中,它可能位于单元格B12中,但在工作簿2中,它将位于单元格C12中。但是,一旦我找到“锚定”单元格,我就可以向右看一个单元格,找到我关心的数值 目前我使用的是: my_data <- iris my_data$Species <- as.character(my_data$Species) my_

我试图在data.frame中查找以给定模式开头的单元格(我需要搜索行和列)。data.frames来自由
readxl
软件包读取的excel工作簿。模式的位置因工作簿而异。因此,在工作簿1中,它可能位于单元格B12中,但在工作簿2中,它将位于单元格C12中。但是,一旦我找到“锚定”单元格,我就可以向右看一个单元格,找到我关心的数值

目前我使用的是:

my_data <- iris
my_data$Species <- as.character(my_data$Species)
my_data[99,5] <- 'my_string'
my_data[109,5] <- 'my_string_too'

target_val <- 'my_string'
which(my_data == target_val, arr.ind = T)
您可以使用
sapply()
,它将输出一个矩阵(在本例中),然后像以前一样使用
which()
。当然,此方法可以扩展为与%中的
%一起使用、
startsWith()
endsWith()
,或者如果您正在进行文字字符串匹配,则使用
grepl()
fixed=TRUE

which(sapply(my_data, function(x) grepl("^my_string", x)), arr.ind = TRUE)

     row col
[1,]  99   5
[2,] 109   5

使用
“^(?:my_string | my_string_too)
检查字符串是否以
my_string
my_string_too
开头,我不确定我是否理解,您的意思是:
哪个(sapply(my_data,function(x)grepl(^my_string),x)),arr.ind=TRUE)
。如果没有,你能澄清一下吗?@Andrew-这正是我想要的!
which(sapply(my_data, function(x) grepl("^my_string", x)), arr.ind = TRUE)

     row col
[1,]  99   5
[2,] 109   5