【问题标题】:filter a data frame and applying a cutoff on multiple columns in r过滤数据框并在 r 中的多列上应用截止值
【发布时间】:2018-08-08 19:00:57
【问题描述】:

我有一个数据框如下:

      [,1]  [,2] [,3]  [,4]  [,5]  [,6]  [,7]

[1,]    A    4    NA    NA   1.55   4     NA

[2,]    B    NA   NA    4    0.56   NA    NA

[3,]    C    4    4     NA   0.62   4     4

[4,]    D    NA   NA    NA   1.61   4     NA

[5,]    E    4    NA    NA    0.5   4     NA

过滤后我想得到的输出是:

       [,1]  [,2]  [,3]  [,4]  [,5]  [,6] [,7]


   [3,]  C     4     4    NA   0.62    4    4


   [5,]  E     4     NA   NA    0.5    4    NA

我希望在第 2 到第 4 列中至少有一个等于 4 的值,在第 6 到第 7 列中至少有一个等于 4 的值。

我正在考虑使用以下命令,但我不确定如何以正确的方式使用它,从而为我提供正确的输出。

命令如下:

 new.df <- df %>% 
 dplyr::filter_at((vars(c(2:4)), any_vars(.  == 4) & vars(c(6:7)), any_vars(. == 4))

您知道如何获得所需的 new.df 吗? 谢谢!

【问题讨论】:

  • 由于您格式化示例数据框的方式,无法将其复制到 R 中使用。这使我们很难尝试解决您的问题。请使用dput 制作一个版本,我们可以直接放入R 中。查看How to make a great R reproducible example 以了解更多信息

标签: r filter dplyr multiple-columns logical-operators


【解决方案1】:

在基础 R 中,您可以执行以下操作:

 df[rowSums(df[2:4]==4,T)>0 & rowSums(df[6:7]==4,T)>0,]
  col1 col2 col3 col4 col5 col6 col7
1    A    4   NA   NA 1.55    4   NA
3    C    4    4   NA 0.62    4    4
5    E    4   NA   NA 0.50    4   NA

【讨论】:

    【解决方案2】:

    我不确定有什么问题,除非它对您来说太冗长并且您想要一种不命名列的方法。

    df = data.frame(col1 = c("A", "B", "C", "D", "E"), 
                    col2 = c(4, NA, 4, NA, 4), 
                    col3 = c(NA, NA, 4, NA, NA), 
                    col4 = c(NA, 4, NA, NA, NA), 
                    col5 = c(1.55, 0.56, 0.62, 1.61, 0.5 ), 
                    col6 = c(4, NA, 4, 4, 4), 
                    col7 = c(NA, NA, 4, NA, NA))
    
    df %>% filter((col2 == 4| col3 == 4 | col4 == 4) & (col6 == 4 | col7 == 4))
    

    产生:

        col1 col2 col3 col4 col5 col6 col7
    1    A    4   NA   NA 1.55    4   NA
    2    C    4    4   NA 0.62    4    4
    3    E    4   NA   NA 0.50    4   NA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多