如何使用dplyr按组进行子集化

时间:2016-08-18 13:13:21

标签: r

我有一个数据集如下:

col1 col2 
1    26  
1    43    
1    34   
2    54
2    27
3    15
4    1
4    4

我想只选择col2大于25的那些组,因此生成的数据集应为

  col1 col2 
    1    26  
    1    43    
    1    34   
    2    54
    2    27

这是一个示例数据集,而不是真实的东西,而不是一个简单的子集答案,我真的在寻找一个dplyr答案:

Nr<-Mrd %>% 
  group_by(col1) %>% 
  slice(which.min(col2>25))

然而,这个答案会让我得到每组中> 25的行,而不是那些最小值为> 25的组。

2 个答案:

答案 0 :(得分:3)

按照您的想法,您不需要which.min,但minfilter代替slice

df %>% 
   group_by(col1) %>% 
   filter(min(col2) > 25)

#Source: local data frame [5 x 2]
#Groups: col1 [2]

#   col1  col2
#  <int> <int>
#1     1    26
#2     1    43
#3     1    34
#4     2    54
#5     2    27

答案 1 :(得分:2)

我们可以使用data.table

library(data.table)
setDT(df)[, if(min(col2) > 25) .SD, by = col1]
#   col1 col2
#1:    1   26
#2:    1   43
#3:    1   34
#4:    2   54
#5:    2   27

或使用ave

中的base R
df[with(df, ave(col2>25, col1, FUN = all)),]
#  col1 col2
#1    1   26
#2    1   43
#3    1   34
#4    2   54
#5    2   27