基于R中的列中的两个变量有条件地过滤组中的值

时间:2017-04-21 17:18:33

标签: r dplyr

我试图有条件地过滤数据框。

以下是我的数据框的一个简单示例:

 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

我想要做的是Players同时玩SPRP的人。 所以,输出应该是这样的:

    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 Wheeler的原因是,在Position列中,他仅列为SP。 Zack Segovia& Zeke Spruill都留下来,因为他们在RP列中都有SPPosition

我尝试了很多不同的方法。主要是我一直试图按名称分组然后过滤,但那还没有奏效。我尝试过的一些代码示例:

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

有人知道如何生成此输出吗?

1 个答案:

答案 0 :(得分:1)

这就是我的尝试:

df %>% group_by(Players) %>%
    mutate(wRP = any(Position == 'RP'),
           wSP = any(Position == 'SP')) %>%
    ungroup() %>%
    filter(wRP == T, wSP == T) %>%
    select(-wRP, -wSP)

基于aosmith的评论:

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

df %>%
    group_by(Players) %>%
    filter(any(Position == 'SP') & any(Position == 'RP'))
相关问题