【问题标题】:Filtering using dplyr filter() on multiple conditions在多个条件下使用 dplyr filter() 进行过滤
【发布时间】:2018-07-05 08:54:50
【问题描述】:

我有一个包含两个变量的唯一值的数据框:

df <- data.frame(V1=LETTERS,V2=c(1:26))

我想为df$V1 中的值和df$V2 的对应值过滤另一个数据框。这是我尝试过的,显然不会产生预期的结果:

df2 <- data.frame(V1=c('A','A','B','B','A'),
                    V2=c(1,2,2,3,4))
df2 %>% filter(V1 %in% unique(df$V1) & V2 %in% unique(df$V2))

我期望后过滤的结果是:

  V1 V2
1  A  1
2  B  2

我如何做到这一点?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:
    merge(df,df2)
      V1 V2
    1  A  1
    2  B  2
    
    library(tidyverse)
    inner_join(df,df2)
      V1 V2
    1  A  1
    2  B  2
    

    【讨论】:

      【解决方案2】:

      你也可以使用

      df[df$V1 %in% unique(df2$V1),]
      
      #   V1 V2
      # 1  A  1
      # 2  B  2
      

      library(tidyverse)
      
      df %>% filter(V1 %in% unique(df2$V1))
      
      #   V1 V2
      # 1  A  1
      # 2  B  2
      

      在上述两种情况下,您将获得df 的行,其中dfV1df2V1 的(唯一)值匹配。

      【讨论】:

        【解决方案3】:

        另一个选项是intersect

        library(dplyr)
        intersect(df, df2)
        #  V1 V2
        #1  A  1
        #2  B  2
        

        或者使用data.table(假设两者都是data.table对象并且具有相同的属性)

        library(data.table)
        fintersect(df, df2)
        #   V1 V2
        #1:  A  1
        #2:  B  2
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-30
          • 2018-08-11
          • 1970-01-01
          • 2018-04-13
          • 2018-09-02
          • 2018-07-10
          相关资源
          最近更新 更多