我有一个数据框列表,我想从中删除在特定列中具有特定值的数据框。
代码
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中解决此问题?
答案 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))]