r语言 - 按ID取范围内最早出现的数字

  • 本文关键字:数字 范围内 r语言 ID r dplyr
  • 更新时间 :
  • 英文 :


类似于在数据帧中第一次出现变量时提取行数据集的例子:

ID   grade    date 
A     1        1/1/2001
A     3        1/2/2002 
A     5        2/4/2002
B     4        1/1/2008
B     4        1/1/2010
B     5        1/1/2011
B     5        1/3/2011
B     4        1/5/2011
C     2        1/1/2006
C     5        1/1/2007
C     5        1/1/2008
D     3        1/1/1996
D     5        1/1/1997
D     5        1/1/1999
E     1        1/1/2003
E     3        1/1/2005
E     3        1/1/2007

我想保留每个人的所有条目,直到他们达到5年级,然后在最早提到5年级之后,无论成绩如何都停止。并非所有id都达到了第5阶段,即使它们有多个相同的等级

,它们也应该保持不变。所需输出:

ID   grade    date 
A     1        1/1/2001
A     3        1/2/2002 
A     5        2/4/2002
B     4        1/1/2008
B     4        1/1/2010
B     5        1/1/2011
C     2        1/1/2006
C     5        1/1/2007
D     3        1/1/1996
D     5        1/1/1997
E     1        1/1/2003
E     3        1/1/2005
E     3        1/1/2007

我可以使用顺序和过滤器功能,但我不确定如何将这些应用到每个人的5,然后排除之后的任何东西?

多谢

您可以使用slice获取从1到第一次出现的5的序列,即

library(dplyr)
df %>% 
group_by(ID) %>% 
slice(1L : first(which(grade == 5)[1])) 
# A tibble: 10 × 3
# Groups:   ID [4]
ID    grade date    
<chr> <int> <chr>   
1 A         1 1/1/2001
2 A         3 1/2/2002
3 A         5 2/4/2002
4 B         4 1/1/2008
5 B         4 1/1/2010
6 B         5 1/1/2011
7 C         2 1/1/2006
8 C         5 1/1/2007
9 D         3 1/1/1996
10 D         5 1/1/1997

编辑如果你的组没有grade = 5,那么

df %>% 
group_by(ID) %>% 
mutate(new = which(grade == 5)[1], 
new = replace(new, is.na(new), max(row_number()))) %>% 
slice(1L : first(new)) %>%
select(-new)
# A tibble: 13 × 4
# Groups:   ID [5]
ID    grade date       
<chr> <int> <chr>    
1 A         1 1/1/2001     
2 A         3 1/2/2002     
3 A         5 2/4/2002     
4 B         4 1/1/2008     
5 B         4 1/1/2010     
6 B         5 1/1/2011     
7 C         2 1/1/2006     
8 C         5 1/1/2007     
9 D         3 1/1/1996     
10 D         5 1/1/1997     
11 E         1 1/1/2003     
12 E         3 1/1/2005     
13 E         3 1/1/2007     

最新更新