r - 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, 1564714860, 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.
解决方案
您可以使用difftime
计算startdate
和之间的平均持续时间date1
。通过将平均值添加到 来替换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
推荐阅读
- php - 如果数字有内部数字字符串
- pandas - 在 numpy 中实现自定义矩阵乘法运算
- java - Java Runtime.exec 在字符串中转义了参数
- jsp - The server cannot started because one or more of the ports are invalid [Tomcat in Eclipse]
- java - Spring Data JPA conditional entity join
- c++ - How to build openFrameworks as a shard library on macOS
- shell - Does opening a pipeline in Perl involve a shell?
- jquery - 如何使用 jquery 从滑块中获取值
- ansible - 使用 KeyCtl 和嵌套在 Proxmox 上创建 LXC 容器
- iso8601 - In ISO 8601 does 'P1D' mean midnight tonight? 24 hours from now? Midnight tomorrow night?