Her bir id
içinde, en az 91 gün arayla satırları tutmak istiyorum. Veritabanım df
'un altında, id=1
, 5 satıra sahiptir ve id=2
, 1 satıra sahiptir.Satırlar, R satırındaki tarihler arasındaki farklara göre nasıl filtrelenir?
id=1
için yalnızca 1., 3. ve 5. satırları tutmak istiyorum.
Bunun nedeni, 1. tarihi ve 2. tarihi karşılaştırırsak, 32 güne kadar farklılık gösterir. Yani, 2 tarihi kaldır. 1. ve 3. tarihleri karşılaştırmaya devam ediyoruz ve 152 güne göre farklılık gösteriyor. Yani, 3. tarihi tutuyoruz.
Şimdi, 1. tarihi referans olarak kullanmak yerine 3. tarihi kullanıyoruz. 3. gün ve 4. tarihler 61 güne göre farklılık gösterir. Yani, 4. tarihi kaldırın. Üçüncü tarihi ve 5. tarihi karşılaştırmaya devam ediyoruz ve 121 güne kadar farklılık gösteriyor. Yani, 5. tarihi tutuyoruz.
Sonunda, tuttuğumuz tarihler 1., 3. ve 5. tarihler. id=2
'a gelince, sadece bir satır var, o yüzden bunu koruyoruz. İstenen sonuç dfnew
'da gösterilmektedir.
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)
Ben sadece aşağıdaki gibi id
tarafından df
gruplama ile başlayan düşünebilirsiniz:
library(dplyr)
dfnew <- df %>% group_by(id)
Ancak, ben buradan devam etmek için nasıl emin değilim. filter
işlevi veya slice
ile devam etmeli miyim? Öyleyse nasıl?
Belki 'Date' sınıfa dönüştürmek:
David Arenburg önerdiği gibi, grup tarafından ilk yerine tarihi sınıfına
date
dönüştürmek için iyidir –@DavidArenburg: Teşekkürler, yorumlarınız her zaman çok takdir edilmektedir. Düzenlemeyi yaptım. – aichao