根据第三列中的行计算两列中日期之间的平均天数

时间:2019-06-06 16:29:11

标签: r

我想根据产品计算故障日期和信用日期之间的平均天数。仅计算天数是没有问题的,但是我找不到任何有关如何找到平均天数的示例。

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 个答案:

答案 0 :(得分:1)

数据表方法

样本数据

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

答案 1 :(得分:0)

tmfmnk和Rui Barradas带我去了我需要去的地方。对于任何感兴趣的人,我还添加了一个方便的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)