Фильтрация идентификаторов между указанными диапазонами дат - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь отфильтровать идентификаторы клиента из фрейма данных, которые появляются в течение первых трех месяцев моего набора данных, но НЕ появляются после окончания первых трех месяцев, оставляя меня с идентификаторами клиента, которые появляются в обоих ранееи после первых трех месяцев.Я включил некоторый код для создания фиктивного набора данных для иллюстрации: -

    ClientId<-c('hgjj156','jksu990','ddks989','fghs676','shjk992','hddq141','huui667','kili1772','djjp8998','hdyy1122','fghs676','shjk992','hgjj156','jksu990')

    DateStamp<-c('01-01-2015', '01-01-2015', '03-01-2015', '10-01-2015', '22-01-2015', '29-01-2015','05-02-2015','11-02-2015', '19-02-2015', '17-03-2015', '02-04-2015', '06-04-2015', '08-04-2015', '09-04-2015')

    df<-cbind(ClientId, DateStamp)
    df

Что должно дать вам это: -

  ClientId   DateStamp   
 "hgjj156"  "01-01-2015"
 "jksu990"  "01-01-2015"
 "ddks989"  "03-01-2015"
 "fghs676"  "10-01-2015"
 "shjk992"  "22-01-2015"
 "hddq141"  "29-01-2015"
 "huui667"  "05-02-2015"
 "kili1772" "11-02-2015"
 "djjp8998" "19-02-2015"
 "hdyy1122" "17-03-2015"
 "fghs676"  "02-04-2015"
 "shjk992"  "06-04-2015"
 "hgjj156"  "08-04-2015"
 "jksu990"  "09-04-2015"

Идея состоит в том, что у меня останется следующееИдентификаторы: -

    ClientId   DateStamp
  "hgjj156"  "01-01-2015"
  "jksu990"  "01-01-2015"
  "fghs676"  "10-01-2015"
  "shjk992"  "22-01-2015"
  "fghs676"  "02-04-2015"
  "shjk992"  "06-04-2015"
  "hgjj156"  "08-04-2015"
  "jksu990"  "09-04-2015"

Есть ли какие-либо идеи относительно того, как мне этого добиться?Я посмотрел на решения dplyr и data.table, но пока не нашел, какие из них были бы наиболее подходящими.Большое спасибо заранее!

1 Ответ

0 голосов
/ 22 октября 2018

оставив меня с идентификаторами клиентов, которые появляются как до, так и после первых трех месяцев

library(data.table)

# formatting
DT = as.data.table(df)
DT[, DateStamp := as.IDate(DateStamp, "%d-%m-%Y")]

# set your thresholds
d_rng = range(DT$DateStamp)
d_dn = seq(d_rng[1], by="+3 months", length.out=2)[2]
d_up = d_dn

# find ids in each window
c_dn = DT[DateStamp < d_dn, unique(ClientId)]
c_up = DT[DateStamp >= d_up, unique(ClientId)]

# filter
DT[ClientId %in% intersect(c_dn, c_up)]

   ClientId  DateStamp
1:  hgjj156 2015-01-01
2:  jksu990 2015-01-01
3:  fghs676 2015-01-10
4:  shjk992 2015-01-22
5:  fghs676 2015-04-02
6:  shjk992 2015-04-06
7:  hgjj156 2015-04-08
8:  jksu990 2015-04-09

Я позаимствовал ответ @GGrothendieck на добавить / удалитьмесяцев .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...