根据R中的顺序值过滤数据

时间:2017-04-22 17:28:24

标签: 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       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

我要做的是在玩家从Year更改为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年被淘汰的原因是因为此时他的RPSP职位从未改变过。

我已经尝试了很多方法来获得这个输出,不幸的是,我完全被难过了。我能够得到的最接近的是这段代码:

df_1 <- df %>% 
      group_by(Name, Position) %>% 
      filter(row_number() == 1 & unique(Position == "RP") | row_number() == n() & unique(Position == "SP")) %>%
      as.data.frame()

但是我得到了这个输出,这不是我想要的:

          Name     Year     Difference_IP Position   Position_num
1    Aaron Heilman 2005          24.0       RP            1
2    Aaron Heilman 2003         -62.0       SP            2
3     Aaron Laffey 2012         -71.8       SP            2
4     Aaron Laffey 2010           5.2       RP            1
           Team  Start-IP Relief-IP
1          Mets     42.0      66.0
2          Mets     63.2       1.2
3     Blue Jays     86.0      14.2
4      Indians     25.0       30.2

我每次尝试考虑它的方式都是每次RPSPSPRP之间都有一个序列Year到下一个,那就是我要保留的数据。

有人知道怎么做吗?非常感谢所有帮助。

1 个答案:

答案 0 :(得分:1)

我们可以使用lagleadfilter

创建逻辑向量
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
相关问题