如何使用 grep 使用 R 中的第二个字符向量列表在数据帧列表中搜索模式匹配
How to use grep to search for patterns matches within a list of data frames using a second list of character vectors in R
我在 R 中有两个列表。一个是数据框列表,其中的行包含字符串(列表 1)。另一个是字符列表(相同长度)(列表 2)。我想以并行方式浏览列表,从列表 2 中获取字符串并搜索它以获取其在列表 1 中相应元素的数据框中的位置(使用 grep)。这是一个玩具示例我的列表是什么样子的:
List1 <- list(data.frame(a = c("other","other","dog")),
data.frame(a = c("cat","other","other")),
data.frame(a = c("other","other","bird")))
List2 <- list("a" = c("dog|xxx|xxx"),
"a" = c("cat|xxx|xxx"),
"a" = c("bird|xxx|xxx"))
我想要得到的输出是模式匹配列表 1 中每个数据框中的位置列表,即在本例中,位置将是 3、1 和 3。因此列表将是:
[[1]]
[1] 3
[[2]]
[1] 1
[[3]]
[1] 3
我似乎不知道该怎么做。
我试过了 lapply:
NewList1 <- lapply(1:length(List1),
function(x) grep(List2[[x]]))
但这不起作用。我也试过 purrr:map2:
NewList2<-map2(List2, List1, grep(List2$A, List1))
这也不行。如果有人就如何解决此问题提出任何建议,我将不胜感激。非常感谢任何愿意介入的人!
使用 Map
你可以做到 -
Map(function(x, y) grep(y, x$a), List1, List2)
#[[1]]
#[1] 3
#[[2]]
#[1] 1
#[[3]]
#[1] 3
map2
尝试已结束,但您需要在函数中将列表引用为 .x
和 .y
。
purrr::map2(List2, List1, ~grep(.x, .y$a))
尝试 Map
+ unlist
> Map(grep, List2, unlist(List1, recursive = FALSE))
$a
[1] 3
$a
[1] 1
$a
[1] 3
我在 R 中有两个列表。一个是数据框列表,其中的行包含字符串(列表 1)。另一个是字符列表(相同长度)(列表 2)。我想以并行方式浏览列表,从列表 2 中获取字符串并搜索它以获取其在列表 1 中相应元素的数据框中的位置(使用 grep)。这是一个玩具示例我的列表是什么样子的:
List1 <- list(data.frame(a = c("other","other","dog")),
data.frame(a = c("cat","other","other")),
data.frame(a = c("other","other","bird")))
List2 <- list("a" = c("dog|xxx|xxx"),
"a" = c("cat|xxx|xxx"),
"a" = c("bird|xxx|xxx"))
我想要得到的输出是模式匹配列表 1 中每个数据框中的位置列表,即在本例中,位置将是 3、1 和 3。因此列表将是:
[[1]]
[1] 3
[[2]]
[1] 1
[[3]]
[1] 3
我似乎不知道该怎么做。
我试过了 lapply:
NewList1 <- lapply(1:length(List1),
function(x) grep(List2[[x]]))
但这不起作用。我也试过 purrr:map2:
NewList2<-map2(List2, List1, grep(List2$A, List1))
这也不行。如果有人就如何解决此问题提出任何建议,我将不胜感激。非常感谢任何愿意介入的人!
使用 Map
你可以做到 -
Map(function(x, y) grep(y, x$a), List1, List2)
#[[1]]
#[1] 3
#[[2]]
#[1] 1
#[[3]]
#[1] 3
map2
尝试已结束,但您需要在函数中将列表引用为 .x
和 .y
。
purrr::map2(List2, List1, ~grep(.x, .y$a))
尝试 Map
+ unlist
> Map(grep, List2, unlist(List1, recursive = FALSE))
$a
[1] 3
$a
[1] 1
$a
[1] 3