Создание столбца срока пребывания в Days in R

Я пытаюсь создать столбец в df, который показывает мне номер дня пребывания клиента. Вот код для создания макета df для этого: -

     Date<-c("20/07/2018", "21/07/2018", "25/07/2018", "02/08/2018", "05/08/2018", "10/08/2018")
     ClientId<-c("aaa", "bbb", "ccc", "aaa", "bbb", "ccc")
     EventId<-c("klk109", "rrt234", "hjk786", "yyu777", "tyw909", "nnl991")
     dateclient<-cbind(Date, ClientId)
     LoginDates<-cbind(dateclient, EventId)
     View(LoginDates)

который должен дать вам что-то вроде этого: -

   head(LoginDates)

      Date     ClientId  EventId 
  "20/07/2018" "aaa"    "klk109"
  "21/07/2018" "bbb"    "rrt234"
  "25/07/2018" "ccc"    "hjk786"
  "02/08/2018" "aaa"    "yyu777"
  "05/08/2018" "bbb"    "tyw909"
  "10/08/2018" "ccc"    "nnl991"

По сути, я хочу создать столбец, чтобы добавить его в конец, как это

     Date    ClientId  EventId   tenureDay
 "20/07/2018" "aaa"    "klk109"      1
 "21/07/2018" "bbb"    "rrt234"      1
 "25/07/2018" "ccc"    "hjk786"      1
 "02/08/2018" "aaa"    "yyu777"     13
 "05/08/2018" "bbb"    "tyw909"     15
 "10/08/2018" "ccc"    "nnl991"     16

Тем не менее, моя основная проблема в моем наборе данных (вышеупомянутая имитация df) заключается в том, что у некоторых клиентов было более одного взаимодействия в день (у некоторых было 10, 20 и т. д.). Код, который я написал (цикл for и некоторый код data.table), вернул количество взаимодействий (или EventId), а не номер дня пребывания в должности. Если клиент был в службе в течение 10 дней и имел, скажем, 4 взаимодействия за это время, я хочу, чтобы столбец tenureDay представлял день его пребывания в должности, когда произошло конкретное взаимодействие.


person Robin Turkington    schedule 25.10.2018    source источник
comment
Пожалуйста, поправьте меня, если я ошибаюсь, поэтому вы хотите найти разницу в днях между первой датой и остальной частью столбца даты? Чтобы вы могли видеть, сколько дней прошло с тех пор, как этот клиент получил должность?   -  person Maylo    schedule 25.10.2018
comment
Привет Майло. Я хочу создать столбец, в котором будет указан номер дня пребывания в должности, т.е. День 1, День 2 и т. д. Например: если клиент находится в службе между 01.01.2018 и его последняя дата была 06.01.2018 , то они находились в эксплуатации 151 день. Если этот клиент входит в службу, например, 20/05/2018, я хочу, чтобы в столбце срока действия было указано 139, поскольку это 139-й день пребывания этого клиента в должности. Я надеюсь, что это проясняет ситуацию!   -  person Robin Turkington    schedule 25.10.2018
comment
И я предполагаю, что дата начала пребывания в должности - это первая дата, которая появляется в таблице?   -  person Maylo    schedule 25.10.2018
comment
извините, я сделал ошибку, задав свой вопрос, я обновлю это сейчас. Извиняюсь за путаницу!   -  person Robin Turkington    schedule 25.10.2018
comment
@Maylo, пожалуйста, обратитесь к вопросу сейчас, я исправил его :)   -  person Robin Turkington    schedule 25.10.2018


Ответы (1)


Спасибо за изменение вопроса!

Для репродуктивности:

LoginDates <- fread("Date     ClientId  EventId 
                    2018-07-20 aaa    klk109
                    2018-07-21 bbb    rrt234
                    2018-07-25 ccc    hjk786
                    2018-08-02 aaa    yyu777
                    2018-08-05 bbb    tyw909
                    2018-08-10 ccc    nnl991")

Используя dplyr, вы можете попробовать это:

LoginDates %>%
  group_by(ClientId) %>%
  mutate(tenureDay = as.Date(Date) - head(as.Date(Date),1))

Я очень надеюсь, что это решит вашу проблему!

ИЗМЕНИТЬ:

Если вы не хотите, чтобы ваш результат выглядел как x Days, попробуйте:

LoginDates %>%
  group_by(ClientId) %>%
  mutate(tenureDay = as.numeric(as.Date(Date) - head(as.Date(Date),1)))
person Maylo    schedule 25.10.2018
comment
Привет @Maylo, спасибо за ваш ответ! К сожалению, в этом случае он не работает так, как предполагалось. Есть ли другие методы, которые приходят на ум? - person Robin Turkington; 25.10.2018
comment
Есть ли способ, если я хочу срок пребывания в должности в месяцах (вместо дней)? - person Grace; 06.04.2020