2017-03-29 51 views
0

我發現類似過濾按組,並保持在那裏的條件是所有實例

東西的example從本質上講,我需要保持一個組中的所有項目,其中等於一些因素用戶。

例如這裏是我的初始數據框。

data <- data.frame(user = c("a","a",'b',"b",'c',"c","a","a","a","d","d","d"), 
        invoiceNum =c(1,1,1,1,1,1,2,2,2,2,2,2)) 

我需要保留所有具有用戶d的發票。

輸出將如下所示:

user invoiceNum 
1 a   2 
2 a   2 
3 a   2 
4 d   2 
5 d   2 
6 d   2 

我試着寫了下面的代碼,但它不工作,並給了我下面的

data%>% group_by(invoiceNum)%>%dplyr::filter(user == "d") 


    user invoiceNum 
    <fctr>  <dbl> 
1  d   2 
2  d   2 
3  d   2 
+0

嘗試'數據%>%GROUP_BY(invoiceNum)%>%的過濾器(任何(用戶==「d」))' –

+1

你先回答了這個問題。如果你想要,你可以提交它作爲答案,我會選擇它。感謝您的幫助。 – daveDo

回答

1

試試這個在base R:

data[data$invoiceNum %in% unique(data[data$user=="d",]$invoiceNum),] 

# user invoiceNum 
#7  a   2 
#8  a   2 
#9  a   2 
#10 d   2 
#11 d   2 
#12 d   2 

所以,你先找到那些invoiceNum在用戶d是出現

  • unique(data[data$user=="d",]$invoiceNum)

,然後篩選出與提取invoiceNum行。


編輯

如果您想爲多個用戶執行相同:

usr <- c("d", "a") 
data[data$invoiceNum %in% unique(data[data$user %in% usr,]$invoiceNum),] 
+0

我將如何修改以包含多個用戶? – daveDo

+0

@daveDo看到我的編輯。 – 989

0

我們可以使用%in%

data %>% 
    group_by(invoiceNum) %>% 
    filter('d' %in% user) 
# user invoiceNum 
# <fctr>  <dbl> 
#1  a   2 
#2  a   2 
#3  a   2 
#4  d   2 
#5  d   2 
#6  d   2 
+0

謝謝你的回答。如果我想過濾多個用戶,代碼如何呢?我試過'data%>% group_by(invoiceNum)%>% filter(c(「a」,「d」)%in%user)'但不起作用 – daveDo

+1

使用'c(「a」,「d」 )'正在尋找(a,d)作爲用戶。你應該使用'|'作爲OR。例如。 'filter('d'%in%user |'a'%in%user)'。如果您想要擴展此列表,基本R解決方案可能更容易 – Pdubbs

相關問題