我试图有条件地过滤数据框。
以下是我的数据框的一个简单示例:
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
同时玩SP
和RP
的人。
所以,输出应该是这样的:
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
列中都有SP
和Position
。
我尝试了很多不同的方法。主要是我一直试图按名称分组然后过滤,但那还没有奏效。我尝试过的一些代码示例:
FG_Pitchers_2002_2016_1 <- FG_Pitchers_2002_2016 %>%
group_by(Players) %>%
filter(Position == "RP" | Position == "SP") %>%
as.data.frame()
有人知道如何生成此输出吗?
答案 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'))