如何按组删除在R中指定字符项之前出现的数据帧行?

如何按组删除在R中指定字符项之前出现的数据帧行?,r,R,例如,假设您正在尝试有效地删除每个idnumber组中出现在单词“Go”之前的所有行,如下所示,而不使用For循环 idnumber<-c(1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5) status<-c("Get", "Ready", "Go", "Get", "Ready", "Get", "Ready", "Go", "Drive", "Get", "Ready", "Get", "Ready", "Go", "Drive",

例如,假设您正在尝试有效地删除每个idnumber组中出现在单词“Go”之前的所有行,如下所示,而不使用For循环

idnumber<-c(1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5)
status<-c("Get", "Ready", "Go", "Get", "Ready", "Get", "Ready", "Go", "Drive", "Get", "Ready", "Get", "Ready", "Go", "Drive", "Turn")
df<-data.frame(idnumber, status)

   idnumber status
        1    Get 
        1  Ready
        1     Go
        2    Get
        2  Ready
        3    Get
        3  Ready
        3     Go
        3  Drive
        4    Get
        4  Ready
        5    Get
        5  Ready
        5     Go
        5  Drive
        5   Turn

我们可以编写一个函数来选择行。如果组中存在“Go”,我们将从该行选择行,直到组结束,如果不存在,我们将不选择任何行

custom_fun <- function(n) {
  inds <- n == "Go"
  if(any(inds)) which.max(inds):length(n) else 0
}
自定义乐趣%slice(自定义乐趣(状态))
#身份证号码状态
#       
#11去
#2.3开始
#3 3路
#4.5开始
#5路5号
#6.5圈
custom_fun <- function(n) {
  inds <- n == "Go"
  if(any(inds)) which.max(inds):length(n) else 0
}
library(dplyr)
df %>% group_by(idnumber) %>% slice(custom_fun(status))

#  idnumber status
#     <dbl> <fct> 
#1        1 Go    
#2        3 Go    
#3        3 Drive 
#4        5 Go    
#5        5 Drive 
#6        5 Turn