R 有条件地从数据帧列表中删除数据帧

R 有条件地从数据帧列表中删除数据帧,r,dataframe,tidyverse,R,Dataframe,Tidyverse,我有一个数据帧列表,我想从中删除在特定列中具有特定值的数据帧 代码 library(tidyverse) combi <- function(a=c(1,2,3), b=c(2,3,4,5)){ return(expand.grid(a,b)) } df <- pmap(list(a=c(1,2,3)), combi) 假设我想删除一个数据帧,如果Var1==2 如何在Tidyverse中解决此问题?您可以在purrr中使用discard purrr::discard(df

我有一个数据帧列表,我想从中删除在特定列中具有特定值的数据帧

代码

library(tidyverse)

combi <- function(a=c(1,2,3), b=c(2,3,4,5)){
  return(expand.grid(a,b))
}

df <- pmap(list(a=c(1,2,3)), combi)
假设我想删除一个数据帧,如果
Var1==2


如何在Tidyverse中解决此问题?

您可以在
purrr
中使用
discard

purrr::discard(df, ~any(.x$Var1 == 2))
#Or using keep
#purrr::keep(df, ~any(.x$Var1 != 2))

#[[1]]
#  Var1 Var2
#1    1    2
#2    1    3
#3    1    4
#4    1    5

#[[2]]
#  Var1 Var2
#1    3    2
#2    3    3
#3    3    4
#4    3    5
或基本R中的
过滤器

Filter(function(x) any(x$Var1 != 2), df)

一些变化:

df[sapply(df, function(x) any(x$Var1 != 2))]
df[purrr::map_lgl(df, ~any(.x$Var1 != 2))]
df[sapply(df, function(x) any(x$Var1 != 2))]
df[purrr::map_lgl(df, ~any(.x$Var1 != 2))]