Внутри каждого id
я хотел бы сохранить строки, по крайней мере, на 91 день. В моем кадре df
ниже id=1
имеет 5 строк и id=2
имеет 1 строку.
Для id=1
, я хотел бы сохранить только 1-й, 3-й и 5-й строки.
Это связано с тем, что если мы сравним 1-ю дату и 2-ю дату, они будут отличаться на 32 дня. Итак, удалите вторую дату. Мы переходим к сравнению 1-й и 3-й даты, и они отличаются на 152 дня. Итак, мы сохраняем 3-й день.
Теперь, вместо использования 1-й даты в качестве ссылки, мы используем 3-ю дату. 3-я дата и 4-я дата отличаются на 61 день. Итак, удалите 4-ю дату. Мы переходим к сравнению 3-й даты и 5-й даты, и они отличаются на 121 день. Итак, мы сохраняем 5-ю дату.
В конце концов, даты, которые мы сохраняем, - это 1, 3 и 5 даты. Что касается id=2
, то есть только одна строка, поэтому мы сохраняем это. Желаемый результат показан в dfnew
.
df <- read.table(header = TRUE, text = "
id var1 date
1 A 2006-01-01
1 B 2006-02-02
1 C 2006-06-02
1 D 2006-08-02
1 E 2007-12-01
2 F 2007-04-20
",stringsAsFactors=FALSE)
dfnew <- read.table(header = TRUE, text = "
id var1 date
1 A 2006-01-01
1 C 2006-06-02
1 E 2007-12-01
2 F 2007-04-20
",stringsAsFactors=FALSE)
Я могу думать только о начале группировки df
на id
следующим образом:
library(dplyr)
dfnew <- df %>% group_by(id)
Однако я не уверен, как продолжить здесь. Должен ли я продолжить функцию filter
или slice
? Если да, то как?