【问题标题】:How to extract all the rows if a level in one column contains all the levels of another column in R?如果一列中的级别包含R中另一列的所有级别,如何提取所有行?
【发布时间】:2017-08-31 05:53:13
【问题描述】:

我有以下数据

    ID       INDUSTRY        PRODUCT                  
  625109    PersonalCare     Neolone Preservatives    
  199672    PersonalCare     Neolone Preservatives     
  227047    Pharma           Optiphen
  186117    Food             Sasol BHT
  625109    PersonalCare     Optiphen
  227047    Food             Neolone Preservatives

如果 ID 包含 Neolon Preservatives 和 Optiphen 这两种产品,我想提取行。

预期结果

  ID       INDUSTRY         PRODUCT
 625109    PersonalCare     Neolone Preservatives
 227047    Pharma           Optiphen
 625109    PersonalCare     Optiphen
 227047    Food             Neolone Preservatives

ID 625109 和 227047 单独包含这两种产品,因此被提取。我怎样才能在 R 中做到这一点?

【问题讨论】:

    标签: r


    【解决方案1】:

    有多种方法可以做到这一点:

    dplyr

    df %>% 
       group_by(ID) %>% 
       filter(all(c("Neolone Preservatives", "Optiphen") %in% PRODUCT))
    
    
    #     ID     INDUSTRY               PRODUCT
    #   <int>        <chr>                 <chr>
    #1 625109 PersonalCare Neolone Preservatives
    #2 227047       Pharma              Optiphen
    #3 625109 PersonalCare              Optiphen
    #4 227047         Food Neolone Preservatives
    

    在基础 R 中:

    df[ave(df$PRODUCT, df$ID, FUN = function(x) 
                     all(c("Neolone_Preservatives", "Optiphen") %in% x)) == "TRUE", ]
    

    【讨论】:

      【解决方案2】:

      这应该可行:

      library(dplyr)
      
      df <- data.frame(ID = c(62, 19, 22, 18, 62, 22),
                       INDUSTRY = c("PC", "PC", "P", "F", "PC", "F"),
                       PRODUCT = c("NP", "NP", "O", "SB", "O", "NP"))
      
      df %>% 
        group_by(ID) %>% 
        filter(any(PRODUCT %in% c("NP"))& any(PRODUCT %in% c("O"))) 
      
      # A tibble: 4 x 3
      # Groups:   ID [2]
           ID INDUSTRY PRODUCT
        <dbl>   <fctr>  <fctr>
      1    62       PC      NP
      2    22        P       O
      3    62       PC       O
      4    22        F      NP
      

      【讨论】:

        【解决方案3】:

        你可以使用库 dplyr 来做到这一点

        filteredData<-data %>%
        filter(INDUSTRY=='PersonalCare',PRODUCT=='Optiphen')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-27
          • 2021-06-15
          • 1970-01-01
          • 2021-06-03
          相关资源
          最近更新 更多