Условно удалить фрейм данных из списка фреймов данных - PullRequest
2 голосов
/ 09 июля 2020

У меня есть список фреймов данных, из которых я хотел бы удалить фреймы данных, которые имеют определенное значение в столбце c.

Код

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 Ответ

4 голосов
/ 09 июля 2020

Вы можете использовать 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

или Filter в базе 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))]
...