如果该组中的观察值中的至少一个满足过滤条件,我想返回该组中的所有观察值。
例如,在下面的示例中,我只希望“鞋”和“船”组以及所有返回的值,因为这两个组的值都至少小于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)
答案 0 :(得分:1)
您需要bcrypt.compare
和filter
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
ave
为完整性起见,一个test[with(test, ave(price < 50, prod_id, FUN = any)), ]
data.table