Вычислить среднее количество дней между датами в 2 столбцах на основе строк в 3-м столбце - PullRequest
0 голосов
/ 06 июня 2019

Я хотел бы рассчитать среднее количество дней между датой отказа и датой кредитования на основе продукта.Простое вычисление количества дней не является проблемой, но я не могу найти примеров того, как найти среднее количество дней.

Product         Credit Date Failure Date
Product1    2/1/2019 0:00   1/24/2019 0:00
Product1    2/1/2019 0:00   1/29/2019 0:00
Product1    2/1/2019 0:00   1/30/2019 0:00
Product1    2/1/2019 0:00   1/31/2019 0:00
Product1    2/1/2019 0:00   1/8/2019 0:00
Product1    2/1/2019 0:00   1/17/2019 0:00
Product1    2/1/2019 0:00   1/8/2019 0:00
Product1    2/1/2019 0:00   1/21/2019 0:00
Product2    2/1/2019 0:00   1/31/2019 0:00
Product2    2/1/2019 0:00   1/7/2019 0:00
Product2    2/1/2019 0:00   1/4/2019 0:00
Product2    2/1/2019 0:00   1/18/2019 0:00
Product2    2/1/2019 0:00   10/17/2018 0:00

К сожалению, я не могу придумать начальную точку, поэтому янет кода для обмена.Все будет хорошо, dplyr или что-то еще.Спасибо за любую помощь, которую вы, ребята, можете предоставить.

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Подход data.table

пример данных

DT <- fread("Product         Credit_Date Failure_Date
Product1    2/1/2019T0:00   1/24/2019T0:00
Product1    2/1/2019T0:00   1/29/2019T0:00
Product1    2/1/2019T0:00   1/30/2019T0:00
Product1    2/1/2019T0:00   1/31/2019T0:00
Product1    2/1/2019T0:00   1/8/2019T0:00
Product1    2/1/2019T0:00   1/17/2019T0:00
Product1    2/1/2019T0:00   1/8/2019T0:00
Product1    2/1/2019T0:00   1/21/2019T0:00
Product2    2/1/2019T0:00   1/31/2019T0:00
Product2    2/1/2019T0:00   1/7/2019T0:00
Product2    2/1/2019T0:00   1/4/2019T0:00
Product2    2/1/2019T0:00   1/18/2019T0:00
Product2    2/1/2019T0:00   10/17/2018T0:00")

#make real datetimes
cols = c("Credit_Date", "Failure_Date")
DT[, (cols) := lapply( .SD, as.POSIXct, format = "%m/%d/%YT%H:%M"), .SDcols = cols]            

код

#summarise
DT[, .( mean = mean( difftime( Credit_Date, Failure_Date, units = "days" ) ) ), 
   by = Product ]

вывод

    Product          mean
1: Product1 11.00000 days
2: Product2 35.00833 days
0 голосов
/ 06 июня 2019

tmfmnk & Руи Баррадас привел меня туда, куда мне нужно было идти. Для всех, кто заинтересовался, я также добавил удобное преобразование unixtime.

df$Credit_Date <- as.Date(as.POSIXct(df$Credit_Date, origin="1970-01-01"))

df$Failure_Date <- as.Date(as.POSIXct(df$Failure_Date, origin="1970-01-01"))

df %>% group_by(Product) %>% summarise(Res = mean(Credit_Date - Failure_Date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...