R 中列表的过滤值

Léo*_*ert 1 r

我有这个数据框列表,

[[1]]
  ns                  title missing
1  0 another string to fail        

[[2]]
  pageid ns  title
1  40657  0 Action

[[3]]
  pageid ns        title
1   8609  0 Nationalisme
Run Code Online (Sandbox Code Playgroud)

我想要一个脚本来删除所有没有“pageid”、“ns”和“title”作为列名的排名。

提前谢谢你

akr*_*run 6

我们可以使用%in%和通过循环遍历元素来all创建逻辑。逻辑可用于对 进行子集化。vectorlistsapplyvectorlist

lst[sapply(lst, function(x) all(c("pageid", "ns", "title") %in% names(x)))]
#[[1]]
#  pageid ns  title
#1  40657  0 Action

#[[2]]
#  pageid ns        title
#1   8609  0 Nationalisme
Run Code Online (Sandbox Code Playgroud)

或者我们可以使用Filter

Filter(function(x) all(c("pageid", "ns", "title") %in% names(x)), lst)
Run Code Online (Sandbox Code Playgroud)

数据

lst <- list(data.frame(ns = 0, title = "another string", missing = "to fail"), 
        data.frame(pageid = 40657, ns =0, title = "Action"), 
        data.frame(pageid= 8609, ns=0, title = "Nationalisme"))
Run Code Online (Sandbox Code Playgroud)