2017-04-21 6 views
0

条件付きでデータフレームをフィルタリングしようとしています。ここで列の2つの変数に基づいてグループ内の値を条件付きでフィルタリングする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 

SPRPの両方を果たしているPlayersを取得することです。 ので、出力は次のようになります。Position欄に、彼は唯一のSPとしてリストされている、ので、ザック・ウィーラーが除外される理由がある

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 

。 Zack Segovia & Zeke Spruillは、の列に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

はい、これは唯一の2つのカテゴリで、うまくいきました。ありがとう! – Julien

答えて

0

これは私が試したものです:aosmithのコメントに基づいて

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

中間ステップを使わずに 'filter(any(Position ==" SP ")&any(Position ==" RP "))を実行することもできます。 – aosmith

+0

@aosmith、提案に感謝し、私は記事を編集しました。 – mt1022

関連する問題