基于R中的顺序值过滤数据
我有一个数据框,我想做一些复杂的过滤。顺序的 以下是我的数据框示例:基于R中的顺序值过滤数据,r,dplyr,R,Dplyr,我有一个数据框,我想做一些复杂的过滤。顺序的 以下是我的数据框示例: Name Year Difference_IP Position Position_num 1 Aaron Heilman 2011 35.1 RP 1 2 Aaron Heilman 2010 72.0 RP 1 3 Aaron Heilman 2009 72.1
Name Year Difference_IP Position Position_num
1 Aaron Heilman 2011 35.1 RP 1
2 Aaron Heilman 2010 72.0 RP 1
3 Aaron Heilman 2009 72.1 RP 1
4 Aaron Heilman 2008 76.0 RP 1
5 Aaron Heilman 2007 86.0 RP 1
6 Aaron Heilman 2006 87.0 RP 1
7 Aaron Heilman 2005 24.0 RP 1
8 Aaron Heilman 2003 -62.0 SP 2
9 Aaron Laffey 2012 -71.8 SP 2
10 Aaron Laffey 2011 52.4 RP 1
11 Aaron Laffey 2010 5.2 RP 1
12 Aaron Laffey 2009 -97.0 SP 2
13 Aaron Laffey 2008 -93.2 SP 2
14 Aaron Laffey 2007 -49.1 SP 2
Team Start-IP Relief-IP
1 Diamondbacks 0.0 35.1
2 Diamondbacks 0.0 72.0
3 Cubs 0.0 72.1
4 Mets 0.0 76.0
5 Mets 0.0 86.0
6 Mets 0.0 87.0
7 Mets 42.0 66.0
8 Mets 63.2 1.2
9 Blue Jays 86.0 14.2
10 - - - 0.0 52.4
11 Indians 25.0 30.2
12 Indians 109.1 12.1
13 Indians 93.2 0.0
14 Indians 49.1 0.0
我想做的是检查玩家从SP
变为RP
或从RP
变为SP
时的年份。以下是预期输出:
Name Year Difference_IP Position Position_num
7 Aaron Heilman 2005 24.0 RP 1
8 Aaron Heilman 2003 -62.0 SP 2
9 Aaron Laffey 2012 -71.8 SP 2
10 Aaron Laffey 2011 52.4 RP 1
11 Aaron Laffey 2010 5.2 RP 1
12 Aaron Laffey 2009 -97.0 SP 2
Team Start-IP Relief-IP
7 Mets 42.0 66.0
8 Mets 63.2 1.2
9 Blue Jays 86.0 14.2
10 - - - 0.0 52.4
11 Indians 25.0 30.2
12 Indians 109.1 12.1
Aaron Heilman从2006-2011年被筛选出的原因是,在这一点上,他的RP
和SP
位置从未改变
我已经尝试了许多方法来获得这个输出,不幸的是,我完全被难倒了。我能得到的最接近的代码是:
df_1 <- df %>%
group_by(Name, Position) %>%
filter(row_number() == 1 & unique(Position == "RP") | row_number() == n() & unique(Position == "SP")) %>%
as.data.frame()
我一直试图思考的方式是,每当RP
到SP
或SP
到RP
之间从一年到下一年都有一个序列,那么这就是我想要保存的数据
有人知道怎么做吗?非常感谢您的帮助 我们可以使用lag
和lead
为filter
ing创建逻辑向量
library(dplyr)
df %>%
group_by(Name) %>%
filter(Position != lag(Position)| Position != lead(Position))
# Name Year Difference_IP Position Position_num Team `Start-IP` `Relief-IP`
# <chr> <int> <dbl> <chr> <int> <chr> <dbl> <dbl>
#1 Aaron Heilman 2005 24.0 RP 1 Mets 42.0 66.0
#2 Aaron Heilman 2003 -62.0 SP 2 Mets 63.2 1.2
#3 Aaron Laffey 2012 -71.8 SP 2 Blue Jays 86.0 14.2
#4 Aaron Laffey 2011 52.4 RP 1 - - - 0.0 52.4
#5 Aaron Laffey 2010 5.2 RP 1 Indians 25.0 30.2
#6 Aaron Laffey 2009 -97.0 SP 2 Indians 109.1 12.1
库(dplyr)
df%>%
分组单位(名称)%>%
过滤器(位置!=滞后(位置)|位置!=领先(位置))
#名称年份差异_IP位置_num团队`起始IP``救济IP`
#
#1 Aaron Heilman 2005 24.0 RP 1大都会42.0 66.0
#2亚伦·海尔曼2003年-62.0标准普尔2大都会63.2 1.2
#3 Aaron Laffey 2012-71.8 SP 2蓝鸟86.0 14.2
#4亚伦·拉菲2011 52.4 RP 1----0.0 52.4
#5 Aaron Laffey 2010 5.2 RP 1印第安人25.0 30.2
#6 Aaron Laffey 2009-97.0 SP 2 109.1 12.1
太棒了!非常感谢你。我们必须仔细阅读lag
和lead
,但这非常有效。
library(dplyr)
df %>%
group_by(Name) %>%
filter(Position != lag(Position)| Position != lead(Position))
# Name Year Difference_IP Position Position_num Team `Start-IP` `Relief-IP`
# <chr> <int> <dbl> <chr> <int> <chr> <dbl> <dbl>
#1 Aaron Heilman 2005 24.0 RP 1 Mets 42.0 66.0
#2 Aaron Heilman 2003 -62.0 SP 2 Mets 63.2 1.2
#3 Aaron Laffey 2012 -71.8 SP 2 Blue Jays 86.0 14.2
#4 Aaron Laffey 2011 52.4 RP 1 - - - 0.0 52.4
#5 Aaron Laffey 2010 5.2 RP 1 Indians 25.0 30.2
#6 Aaron Laffey 2009 -97.0 SP 2 Indians 109.1 12.1