【问题标题】:filter by values that appear in one or another column in R按出现在 R 中的一列或另一列中的值过滤
【发布时间】:2023-03-14 17:58:01
【问题描述】:

我有这个数据框:

intA <- c('A', 'A', 'A', 'D', 'D', 'F', 'L')
intB <- c('B', 'D', 'T', 'T', 'B', 'K', 'M')
num <- c(1:7)
num2 <- c(6,6,7,7,7,6,7)
df <- data.frame(intA, intB, num, num2)
df

并且我想在 intA 或 intB 列中出现值 A 或 T 时过滤数据框,我知道如何按一个或另一个过滤,但我需要同时过滤两者:

library(dplyr)
p <- c('A', 'T')

filter(df, intA %in% p)
filter(df, intB %in% p)

预期输出将是: intA intB num num2 1 A B 1 6 2 天 2 6 3 次 3 7 2 D T 4 7

提前谢谢你!

【问题讨论】:

    标签: r filter dplyr


    【解决方案1】:

    您可以将这两个条件与 OR 组合,即 |运算符。

    filter(df, intA %in% p | intB %in% p)
    
      intA intB num num2
    1    A    B   1    6
    2    A    D   2    6
    3    A    T   3    7
    4    D    T   4    7
    

    ´´´

    【讨论】:

      【解决方案2】:

      这行得通吗:

      > library(dplyr)
      > df %>% rowwise() %>% filter(grepl('[AT]', intA) | grepl('[AT]', intB))
      # A tibble: 4 x 4
      # Rowwise: 
        intA  intB    num  num2
        <chr> <chr> <int> <dbl>
      1 A     B         1     6
      2 A     D         2     6
      3 A     T         3     7
      4 D     T         4     7
      > 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-08
        • 2016-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多