jst*_*ar9 5 r list subset purrr
我对 R 相当陌生,我正在尝试将 PDF 中的数据解析为数据表。我已经能够将文本解析为列表,但我很难尝试从列表中过滤数据。
例如,请考虑下面的示例列表:
l_vectors <- list( c("K", "10", "20"),
                   c("1", "30", "40"),
                   c("a", "b", "c"),
                   c("x", "y", "z"))
假设我想过滤此列表,使其仅包含以“K”或“1”开头的向量
我可以使用 map_lgl 来查找逻辑向量,指示哪些列表项是匹配的
map_lgl(l_vectors, function(x) x[1] == "K" | x[1] == "1" )
[1]  TRUE  TRUE FALSE FALSE
听说我不太确定最好的方向。我猜想我想将这个逻辑向量与勇气结合使用,但似乎无法弄清楚。任何帮助,将不胜感激!
干杯,乔纳森
一个选项是keep循环 of listsvector并创建一个长度为 1 的逻辑向量,并用str_detect包裹起来any。这里检查的模式是字符串|开头 ( ) 的字符“K”或 ( ) “1”^
library(purrr)
library(stringr)
keep(l_vectors, ~ any(str_detect(.x, "^(K|1)")))
#[[1]]
#[1] "K"  "10" "20"
#[[2]]
#[1] "1"  "30" "40"
如果我们只检查第一个元素,则不需要any包装
keep(l_vectors, ~ str_detect(.x[1], "^(K|1)"))
#[[1]]
#[1] "K"  "10" "20"
#[[2]]
#[1] "1"  "30" "40"
如果它是固定匹配,那么如@markus帖子中所示,可以使用%in%
keep(l_vectors,  ~ .x[1] %in% c("K", "1"))