#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))