Как вы можете удалить строки кадра данных по группе, которые встречаются до указанной символьной записи в R? - PullRequest
0 голосов
/ 29 февраля 2020

Например, предположим, что вы пытались эффективно удалить все строки в каждой группе идентификаторов, которые встречаются перед словом "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

Желаемые результаты:

   idnumber status
        1     Go
        3     Go
        3  Drive
        5     Go
        5  Drive
        5   Turn

1 Ответ

0 голосов
/ 29 февраля 2020

Мы можем написать функцию для выбора строк. Если в группе присутствует «Go», мы выбираем строки от этой строки до конца группы, если ее нет, мы не выбираем ни одной строки.

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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...