2017-08-31 63 views
0

我有以下數據如果一列中的級別包含R中另一列的所有級別,如何提取所有行?

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既包含了產品NEOLONE防腐劑和Optiphen提取行。

預期結果

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

這些ID 625109和227047單獨含有兩種產品,因此萃取。我如何在R中做到這一點?

回答

2

多種方式來做到這一點:

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 

在BAS e R:

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

非常感謝。 – Rini

1

這應該工作:

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 
0

你可以與圖書館做dplyr

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