微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

2 个日期列 R 之间的平均天数

如何解决2 个日期列 R 之间的平均天数

我在一个数据框中有 2 个日期列,有超过 10 万个观察值

date1 开始日期
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,则:

date1 开始日期
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

可重现的例子:

结构(列表(日期 1 = 结构(c(1594069500, 1575320400,1603742400,不适用,1574975100,1570845660,1575061500,1564714​​860,1576544400,1574802300,1576198800,1575338460,1575666180,1594327800,1595365200,1594069800,1591905600,1594414800,NA),class = c("POSIXct","POSIXt"),tzone = ""),startdate = structure(c(1599242400,1577127600,1603396800,1577516400,1573714800,1577689200,1566374400,1577343600,1577257200,1605193200,1605106800,1600358400,1600272000,tzone = "UTC")),row.names = c(1L,2L、7591L、8301L、8692L、8​​694L、8699L、8703L、8706L、8709L、8710L、 8714L、8715L、8730L、8732L、8733L、8736L、8740L、8745L、8749L ),class = "data.frame")

解决方法

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

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
,

这样的?? 我无法验证,因为您想要的输出与您的示例数据不匹配..

library(data.table)
setDT(mydata)
mydata[is.na(startdate) & !is.na(date1),startdate := date1 + round(mean(abs(DT$date1 - DT$startdate),na.rm = TRUE))]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。