我尝试过滤包含min x值的组。但我想保留整个小组。
此处有类似帖子,但不适用于min value
过滤
Remove groups that contain certain strings
所以我试试
df <-data.frame(x=c(250,240,233,250,100,10,250,100,1),gr=gl(3,3))
> df
x gr
1 250 1
2 240 1
3 233 1
4 250 2
5 100 2
6 10 2
7 250 3
8 100 3
9 1 3
df%>%
group_by(gr)%>%
filter(all(x==min(x)))
返回空df。为什么?
预期输出为
x gr
7 250 3
8 100 3
9 1 3
答案 0 :(得分:1)
您应该使用any
代替all
df%>%group_by(gr)%>%filter(any(x==min(df$x)))
# A tibble: 3 x 2
# Groups: gr [1]
x gr
<dbl> <fctr>
1 250 3
2 100 3
3 1 3
答案 1 :(得分:1)
基础R方法可能是找到gr
min
imum x
的相应df[df$gr %in% df$gr[which.min(df$x)],]
# x gr
#7 250 3
#8 100 3
#9 1 3
,然后基于此过滤数据框。
ave
或类似于您使用df[ave(df$x, df$gr, FUN = function(i) any(i == min(df$x))) == 1, ]
checkForUpdate()