Как удалить все строки в группе, когда одно из наблюдений удовлетворяет определенному условию?

#r #dataframe #dplyr

Вопрос:

Мне нужно знать, как удалить все строки до определенной точки в data.frame (DF1)

Я хочу удалить все строки перед строкой с наименьшим номером (сгруппированные по идентификатору и упорядоченные по дате).

 DF1 ID Date Value 1 2/11/2021 0  1 2/12/2021 2  1 2/13/2021 1  1 2/14/2021 0  1 2/15/2021 1  1 2/16/2021 -37  1 2/17/2021 0  1 2/18/2021 1  1 2/19/2021 -2  

Фрейм данных, к которому я пытаюсь добраться (DF2):

 DF2 ID Date Value  1 2/16/2021 -37  1 2/17/2021 0  1 2/18/2021 1  1 2/19/2021 -2  

Спасибо!

Ответ №1:

Вы можете использовать —

 library(dplyr)  df %gt;%   mutate(Date = as.Date(Date, '%m/%d/%Y')) %gt;%  arrange(ID, Date) %gt;%  group_by(ID) %gt;%   slice(which.min(Value):n()) %gt;%  ungroup   # ID Date Value # lt;intgt; lt;dategt; lt;intgt; #1 1 2021-02-16 -37 #2 1 2021-02-17 0 #3 1 2021-02-18 1 #4 1 2021-02-19 -2  

Ответ №2:

Мы можем сделать

 library(dplyr) library(lubridate) DF1 %gt;%  arrange(ID, mdy(Date)) %gt;%  group_by(ID) %gt;%   slice(match(min(Value), Value):n()) %gt;%   ungroup # A tibble: 4 × 3  ID Date Value  lt;intgt; lt;chrgt; lt;intgt; 1 1 2/16/2021 -37 2 1 2/17/2021 0 3 1 2/18/2021 1 4 1 2/19/2021 -2  

данные

 DF1 lt;- structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Date = c("2/11/2021",  "2/12/2021", "2/13/2021", "2/14/2021", "2/15/2021", "2/16/2021",  "2/17/2021", "2/18/2021", "2/19/2021"), Value = c(0L, 2L, 1L,  0L, 1L, -37L, 0L, 1L, -2L)), class = "data.frame", row.names = c(NA,  -9L))