在R中使用dplyr过滤时返回整个组

时间:2019-01-22 03:25:22

标签: r dplyr

如果该组中的观察值中的至少一个满足过滤条件,我想返回该组中的所有观察值。

例如,在下面的示例中,我只希望“鞋”和“船”组以及所有返回的值,因为这两个组的值都至少小于50。

我尝试使用group_by,但似乎只返回满足过滤条件的观察值,而不是整个组。

library(dplyr)

test <- data.frame('prod_id'= c("shoe", "shoe", "shoe", "shoe", "shoe", 
"shoe", "boat", "boat","boat","boat","boat","boat", "ship", "ship", 
 "ship", 
"ship", "ship", "ship"), 
       'seller_id'= c("a", "b", "c", "d", "e", "f", "a","g", "h", "r", 
"q", "b", "qe", "dj", "d3", "kk", "dn", "de"), 
       'Dich'= c(1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0),
       'price' = c(12, 200, 10, 4, 3, 4, 99, 55, 86, 88, 75, 64, 82, 
 21, 44, 34, 22, 33)
        )

这是我尝试过的

test2 <- test%>%
         group_by(prod_id) %>%
         (filter = price < 50)

1 个答案:

答案 0 :(得分:1)

您需要bcrypt.comparefilter

any

或者使用library(dplyr) test%>% group_by(prod_id) %>% filter(any(price < 50)) # prod_id seller_id Dich price # <fct> <fct> <dbl> <dbl> # 1 shoe a 1 12 # 2 shoe b 0 200 # 3 shoe c 0 10 # 4 shoe d 0 4 # 5 shoe e 0 3 # 6 shoe f 0 4 # 7 ship qe 0 82 # 8 ship dj 0 21 # 9 ship d3 0 44 #10 ship kk 0 34 #11 ship dn 0 22 #12 ship de 0 33

的基本R方法
ave

为完整性起见,一个test[with(test, ave(price < 50, prod_id, FUN = any)), ]

data.table