difftime () между двумя одинаковыми датами возвращает 0, есть ли способ вернуть 1? - PullRequest
0 голосов
/ 04 марта 2019

У меня есть объединенный фрейм данных, который выглядит следующим образом:

DF <-  structure(list(OpenUser = c(11111, 11111, 11111, 11111, 11111, 
11111), OpenFirstName = c("Sigal", "Sigal", "Sigal", "Sigal", 
"Sigal", "Sigal"), OpenLastName = c("segal", "segal", "segal", 
"segal", "segal", "segal"), CRMEventStartDate = structure(c(1430524800, 
1430524800, 1435881600, 1435881600, 1425168000, 1425168000), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), CustomerID = c(7033, 7033, 7033, 7033, 
9040, 9040), Application = c("Incoming Call", "Incoming Call", 
"Incoming Call", "Incoming Call", "Incoming Call", "Incoming Call"
), CustomerType = c("Private", "Private", "Private", "Private", 
"Private", "Private"), CampaignStrategyID = c(121212, 512345, 
121212, 512345, 512345, 516345), ResponseDate = structure(c(1435881600, 
1430524800, 1435881600, 1430524800, 1425168000, 1430870400), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), ResponseCode = c(3, 1, 3, 1, 3, 1), 
    days = c(62, 0, 0, -62, 0, 66)), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -6L))

У меня есть две проблемы с этим фреймом данных:

1) время разницы между двумя одинаковыми датами возвращает 0, мне нужно, чтобы вернуть 1.

2) это объединенный фрейм данных.каким-то образом мое объединение вернуло нежелательные строки, где вы можете видеть, что "CRMEventstartdate" идет после "ResponseDate", что невозможно.Дата ответа всегда должна быть в тот же день или позже, НЕ до.почему это происходит и как я могу предотвратить это?

два объединенных кадра данных:

Calls <- structure(list(OpenUser = c(11111, 11111, 11111, 11111, 11111, 
11111), OpenFirstName = c("Sigal", "Sigal", "Sigal", "Sigal", 
"Sigal", "Sigal"), OpenLastName = c("segal", "segal", "segal", 
"segal", "segal", "segal"), CRMEventStartDate = structure(c(1430524800, 
1435881600, 1425168000, 1438473600, 1417478400, 1435881600), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), CustomerID = c(7033, 7033, 9040, 17472, 
35099, 39778), Application = c("Incoming Call", "Incoming Call", 
"Incoming Call", "Incoming Call", "Incoming Call", "Incoming Call"
), CustomerType = c("Private", "Private", "Private", "Private", 
"Private", "Private")), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

AND

Response <- structure(list(CampaignStrategyID = c(512345, 512345, 512345, 
121212, 512345, 121212), CustomerID = c(836, 1070, 1390, 2970, 
3479, 3646), ResponseDate = structure(c(1441065600, 1441065600, 
1431129600, 1435881600, 1420502400, 1417392000), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), ResponseCode = c(1, 1, 1, 3, 2, 1)), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

Код, используемый для объединенияи рассчитать разницу времени было:

DF <- inner_join(Calls,Response,by="CustomerID") %>% 
   mutate(days=as.numeric(difftime(ResponseDate,CRMEventStartDate,units = "days")))

1 Ответ

0 голосов
/ 05 марта 2019

Выберите любой из этих вариантов.Они изменят 0 на 1.

mutate(days = pmin(as.numeric(difftime(ResponseDate,CRMEventStartDate,units = "days")), 1))

mutate(days = as.numeric(difftime(ResponseDate,CRMEventStartDate,units = "days")),
       days = ifelse(days == 0, 1, days))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...