使用 grepl & which 查找单元格
Find cell with grepl & which
我试图在 data.frame 中找到以给定模式开头的单元格(我需要搜索行和列)。 data.frame 来自 excel 个正在被 readxl
包读取的工作簿。模式的位置因工作簿而异。因此,在工作簿 1 中,它可能位于单元格 B12 中,但在工作簿 2 中,它将位于 C12 中。但是,一旦我找到 'anchor' 单元格,我就可以向右查看 1 个单元格并找到我关心的数值。
目前我正在使用这个:
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)
这对精确匹配很有用,但我想获得 grepl
的功能来使用 'starts with' 或 'OR' 之类的东西,但不知道如何组合他们俩。有没有办法做这样的事情:
which(my_data[grepl('my_string|my_string_too', my_data, ignore.case = T)], arr.ind = T)
您可以使用 sapply()
来输出一个矩阵(在本例中),然后像以前一样使用 which()
。当然,此方法扩展到与 %in%
、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
我试图在 data.frame 中找到以给定模式开头的单元格(我需要搜索行和列)。 data.frame 来自 excel 个正在被 readxl
包读取的工作簿。模式的位置因工作簿而异。因此,在工作簿 1 中,它可能位于单元格 B12 中,但在工作簿 2 中,它将位于 C12 中。但是,一旦我找到 'anchor' 单元格,我就可以向右查看 1 个单元格并找到我关心的数值。
目前我正在使用这个:
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)
这对精确匹配很有用,但我想获得 grepl
的功能来使用 'starts with' 或 'OR' 之类的东西,但不知道如何组合他们俩。有没有办法做这样的事情:
which(my_data[grepl('my_string|my_string_too', my_data, ignore.case = T)], arr.ind = T)
您可以使用 sapply()
来输出一个矩阵(在本例中),然后像以前一样使用 which()
。当然,此方法扩展到与 %in%
、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