2017-04-21 32 views
0

我試圖有條件地過濾數據幀。根據R中列中的兩個變量有條件地過濾組中的值

這裏是我的數據幀的一個簡單的例子:

library(dplyr) 
head(FG_Pitchers_2002_2016) 
     Players  Year   Team Start-IP Relief-IP Position 
    Zack Segovia 2009 Nationals  0.0  10.1  RP 
    Zack Segovia 2007  Phillies  5.0  0.0  SP 
    Zack Wheeler 2014   Mets 185.1  0.0  SP 
    Zack Wheeler 2013   Mets 100.0  0.0  SP 
    Zeke Spruill 2014 Diamondbacks  5.1  17.1  RP 
    Zeke Spruill 2013 Diamondbacks  7.0  4.1  SP 

我想要做的就是誰發揮雙方SPRPPlayers。 因此,輸出應該是這樣的:

Players Year   Team  Start-IP Relief-IP Position 
Zack Segovia 2009 Nationals  0.0  10.1  RP 
Zack Segovia 2007  Phillies  5.0  0.0  SP 
Zeke Spruill 2014 Diamondbacks  5.1  17.1  RP 
Zeke Spruill 2013 Diamondbacks  7.0  4.1  SP 

原因扎克惠勒被過濾掉,因爲,在Position列,他只是列爲SP。 Zack Segovia & Zeke Spruill都留下,因爲他們在Position列中都有RPSP

我已經嘗試了許多不同的方式來做到這一點。主要是我一直試圖按名稱進行分組,然後過濾,但那一直沒有奏效。我試驗過的一些代碼的一個例子:

FG_Pitchers_2002_2016_1 <- FG_Pitchers_2002_2016 %>% 
group_by(Players) %>% 
filter(Position == "RP" | Position == "SP") %>% 
as.data.frame() 

有人會知道如何產生這個輸出嗎?

+1

可以'Position'比這兩類多嗎?如果不是,那麼'filter(n_distinct(Position)== 2)'? – aosmith

+0

是的,這些是唯一的兩個類別,它的工作,謝謝! – Julien

回答

0

這是我的嘗試:

基於艾歐史密斯的評論
df %>% group_by(Players) %>% 
    mutate(wRP = any(Position == 'RP'), 
      wSP = any(Position == 'SP')) %>% 
    ungroup() %>% 
    filter(wRP == T, wSP == T) %>% 
    select(-wRP, -wSP) 

df %>% 
    group_by(Players) %>% 
    filter(all(c('RP', 'SP') %in% Position)) 

df %>% 
    group_by(Players) %>% 
    filter(any(Position == 'SP') & any(Position == 'RP')) 
+0

你也可以直接進行過濾(任何(位置==「SP」)&任何(位置==「RP」))''而不需要中間步驟。 – aosmith

+0

@aosmith,感謝您的建議和我編輯的帖子。 – mt1022

相關問題