【问题标题】:How to compute a date according to a column with number of days?如何根据天数列计算日期?
【发布时间】:2021-04-28 08:32:18
【问题描述】:

考虑以下格式的数据集:

StartDate NbOfDays EndDate
2018-09-23 08:00:00 65 NA
2019-10-08 08:00:00 30 2019-11-08 08:00:00

EndDate为缺失值时,如何根据NbOfDays变量计算?

预期输出

StartDate NbOfDays EndDate
2018-09-23 08:00:00 65 2018-11-28 08:00:00
2019-10-08 08:00:00 30 2019-11-08 08:00:00

【问题讨论】:

  • 使用lubridate。将两列都转换为适当的类型,然后使用df$StartDate + days(df$NbOfDays) 获取结束日期
  • “海量”数据集能否更精确?数千行、数百万行、数百万行?
  • @MichaelChirico 超过 400 万行!
  • 一些建议 (1) 您从 csv 获取数据,data.table::fread 可能能够直接为您提供开始/结束列的 POSIXct(对于 R 中的转换,使用fasttime 包)(2)检查有多少独特的行——如果有很多重复,你可以为每个独特的组合只运行一次加法

标签: r dataframe date


【解决方案1】:
library(tidyverse)
library(lubridate)

df
            StartDate NbOfDays             EndDate
1 2018-09-23 08:00:00       65 2018-11-28 08:00:00
2 2019-10-08 08:00:00       30 2018-11-28 08:00:00

df %>% 

  mutate(StartDate = ymd_hms(StartDate)) %>%
  mutate(EndDate = StartDate + days(NbOfDays))

            StartDate NbOfDays             EndDate
1 2018-09-23 08:00:00       65 2018-11-27 08:00:00
2 2019-10-08 08:00:00       30 2019-11-07 08:00:00

【讨论】:

  • 我没有看到你的编辑,然后说我有奇怪的结果,让我们试试这个新的,谢谢!
【解决方案2】:

base 中,您可以通过乘以 24 小时 60 分钟和 60 秒来添加天数。

as.POSIXct("2018-09-23 08:00:00", "UTC") + 65 * 24*60*60
#[1] "2018-11-27 08:00:00 UTC"

看来您必须增加 1 天才能达到您想要的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    相关资源
    最近更新 更多