首页 > 解决方案 > 2个日期列R之间的平均天数

问题描述

我在数据框中有 2 个日期列,观测值超过 100k

日期1 开始日期
2020-07-30 23:00:00 不适用
2020-12-10 04:00:00 2021-06-30 20:00:00
2020-10-26 21:00:00 不适用
2019-12-03 03:01:00 2020-02-01 01:00:00
不适用 2020-06-28 07:30:00

我必须填写 startdate 列中的缺失值,所以我的想法是计算 date1 和 startdate 之间的平均天数,并在此平均值和 date1 日期之间相加后替换 startdate 中的 NA。

期望的输出

例如,如果平均天数为 70,则:

日期1 开始日期
2020-07-30 23:00:00 2020-10-08 23:00:00
2020-12-10 04:00:00 2021-06-30 20:00:00
2020-10-26 21:00:00 2021-01-04 21:00:00
2019-12-03 03:01:00 2020-02-01 01:00:00
不适用 2020-06-28 07:30:00

可重现的例子:

structure(list(date1 = structure(c(1594069500, 1575320400, 1603742400, NA, 1574975100, 1570845660, 1575061500, 1564714​​860, 1576544400, 1574802300, 1576198800, 1575338460, 1575666180, NA, 1594327800, 1595365200, 1594069800, 1591905600, 1594414800, NA) , class = c("POSIXct", "POSIXt"), tzone = ""), startdate = structure(c(1599242400, 1577127600, NA, 1603396800, 1577516400, 1573714800, 1577689200, 1566374400, 1577343600, 1577516400, 1577343600, NA, 1577257200, NA, 1605193200, 1605106800, 1600358400, 1600358400, 1600272000, NA), class = c("POSIXct", "POSIXt"), tzone = "UTC")), row.names = c(1L, 2L, 7591L, 8301L, 8692L, 8694L, 8699L, 8703L, 8706L, 8709L, 8710L, 8714L, 8715L, 8730L, 8732L, 8733L, 8736L, 8740L, 8745L, 8749L), class = "dataframe.

标签: rdatedatetimestatistics

解决方案


您可以使用difftime计算startdate和之间的平均持续时间date1。通过将平均值添加到 来替换NA中的值。startdatedate1

avg <- as.numeric(mean(difftime(df$startdate, df$date1, units = 'secs'), na.rm = TRUE))
df$startdate[is.na(df$startdate)] <- df$date1[is.na(df$startdate)] + avg
df

推荐阅读