2016-08-18 81 views
0

子集我有一個數據集如下:如何通過組dplyr

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爲最小的組。

+4

我不明白你想要的輸出。在你的組中沒有一個組的最小值大於25.你是否在尋找*任何大於25的值?像'Mrd%>%group_by(col1)%>%filter(any(col2> 25))''?你真的需要嘗試正確地解釋自己 –

+1

你的意思是說你想在'col2'中至少有1個值大於25的'col1'? (即在基礎r' ind < - df $ col1 [df $ col2> 25]; df [df $ col1%in%ind,]' – Sotos

+0

道歉。我已經更改了數據,以便前兩組中的最小值然而,問題仍然是一樣的 - 我想得到最小值大於25的組 –

回答

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 
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 

或者使用avebase 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