如何在R中过滤列表

Sha*_*and 3 loops r function list

我有一个要过滤的列表。

[[100]][[1]]$total
[1] 7


[[100]][[2]]
[1] 7

[[100]][[3]]
[1] 25082.66
Run Code Online (Sandbox Code Playgroud)

这是我从脚本中得到的输出,我试图过滤此列表中总计 = 7 的所有元素。我总共有 100 个元素。

我的清单被标记为“排序”

 A<-(list.filter(sorts,total>6)) 
Run Code Online (Sandbox Code Playgroud)

我想要一个仅包含总计为 7 的元素的列表

Ron*_*hah 8

我们可以从每个列表中提取"total"元素并仅选择其中包含 7 的元素。

lst[sapply(lst, "[[", "total") == 7]

#[[1]]
#[[1]]$total
#[1] 7

#[[1]][[2]]
#[1] 2

#[[1]][[3]]
#[1] 2


#[[2]]
#[[2]]$total
#[1] 7

#[[2]][[2]]
#[1] 2

#[[2]][[3]]
#[1] 2
Run Code Online (Sandbox Code Playgroud)

或者我们也可以使用Filter

Filter(function(x) x[["total"]] == 7, lst)
Run Code Online (Sandbox Code Playgroud)

使用purrr我们可以使用keep/discard

library(purrr)
keep(lst, ~.[["total"]] == 7)

discard(lst, ~.[["total"]] != 7)
Run Code Online (Sandbox Code Playgroud)

或者map_lgl

lst[map_lgl(lst, ~.[["total"]] == 7)]
Run Code Online (Sandbox Code Playgroud)

数据

假设您的列表被调用lst并且如下所示

lst <- list(list(total = 100, 1, 2), list(total = 7, 2, 2), 
        list(total = 7, 2, 2), list(total = 71, 2, 2))
Run Code Online (Sandbox Code Playgroud)


akr*_*run 6

我们可以使用pluckmap

keep(lst, map(lst, pluck, "total") == 7)
#[[1]]
#[[1]]$total
#[1] 7

#[[1]][[2]]
#[1] 2

#[[1]][[3]]
#[1] 2


#[[2]]
#[[2]]$total
#[1] 7

#[[2]][[2]]
#[1] 2

#[[2]][[3]]
#[1] 2
Run Code Online (Sandbox Code Playgroud)

数据

lst <- list(list(total = 100, 1, 2), list(total = 7, 2, 2), 
        list(total = 7, 2, 2), list(total = 71, 2, 2))
Run Code Online (Sandbox Code Playgroud)