【问题标题】:Remove a dataframe from a list of dataframes conditionally有条件地从数据框列表中删除数据框
【发布时间】:2020-10-29 22:53:23
【问题描述】:

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

代码

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 中解决这个问题?

【问题讨论】:

    标签: r dataframe tidyverse


    【解决方案1】:

    你可以在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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 2015-05-16
      • 1970-01-01
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      相关资源
      最近更新 更多