【问题标题】:Filter for column value if another column contains a value如果另一列包含值,则过滤列值
【发布时间】:2020-07-19 01:50:43
【问题描述】:

本质上,如果另一列包含值,我想过滤一列。这是一个例子:

my_df <- data.frame(x = c(1,1,1,2,2,2),
           y = c(1,2,3,4,5,6)) 
> my_df
  x y
1 1 1
2 1 2
3 1 3
4 2 4
5 2 5
6 2 6

让我们过滤x!=1 当且仅当y!=1。这是我的预期结果:

  x y
1 1 1
2 2 4
3 2 5
4 2 6

【问题讨论】:

    标签: r filter dplyr conditional-statements


    【解决方案1】:

    我们可以在这里使用group_by filter

    library(dplyr)
    my_df %>%
       group_by(x) %>% 
       filter(if(any(y == 1)) y == 1 else TRUE)
    # A tibble: 4 x 2
    # Groups:   x [2]
    #      x     y
    #  <dbl> <dbl>
    #1     1     1
    #2     2     4
    #3     2     5
    #4     2     6
    

    或者如果它不需要分组

    my_df %>%
       filter( (x == 1 & y == 1)|(x !=1))
    

    或者subset

    subset(my_df,  (x == 1 & y == 1)|(x !=1))
    #  x y
    #1 1 1
    #4 2 4
    #5 2 5
    #6 2 6
    

    或者

    subset(my_df,  (x == 1 & y == 1)|(x !=1 & y != 1))
    

    【讨论】:

    • 非常感谢您的回答。什么时候需要分组?
    • @Ali 当您检查“x”的每个唯一值是否满足“y”的条件时。在这里,您的条件仅适用于 x 的特定值,因此不需要分组
    猜你喜欢
    • 2013-12-08
    • 2017-11-13
    • 2013-07-28
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 2020-10-23
    • 2011-08-13
    • 1970-01-01
    相关资源
    最近更新 更多