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

时间:2020-07-09 10:53:32

标签: 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)

输出

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

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

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

如果Var1==2,我想删除一个数据框。

您如何在Tidyverse中解决此问题?

1 个答案:

答案 0 :(得分:4)

您可以在discard中使用purrr

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

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))]