【问题标题】:Changing dates in a dataframe based on the time of day?根据一天中的时间更改数据框中的日期?
【发布时间】:2020-03-30 14:47:21
【问题描述】:

我正在开展一个项目,该项目将一天中的时间定义为早上 7 点到早上 7 点,而不是传统的午夜到午夜。我需要一些帮助来更改此数据框中的日期以匹配我们对日期的定义。例如,如果此数据框显示 12 月 21 日凌晨 3:54,我需要将日期更改为 12 月 20 日。但是,如果显示为晚上 8:59,则日期将与数据集中已有的日期相同。

简单来说,我需要更改午夜和早上 7 点之间的所有时间的日期。 Ifelse 语句是解决此问题的最佳方法吗?

抱歉,语言令人困惑,但我想不出更好的方式来表达我对这个想法的理解。

【问题讨论】:

  • 发帖时请按照r标签顶部的说明进行操作。
  • 为什么不直接减去 7 个小时?

标签: r date if-statement time


【解决方案1】:

一种方法是将dplyr 和lubridate 与if_else 方法结合使用。

library(dplyr)
library(lubridate)
data %>% 
     mutate(Date = mdy(Date),Time = hms(Time)) %>%
     mutate(UpdatedDate = if_else(Time < hms("07:00:00"), Date - days(1), Date))
#   Country       Date       Time UpdatedDate
#1 Alamance 2015-08-11 17H 38M 0S  2015-08-11
#2 Alamance 2012-11-08 15H 52M 0S  2012-11-08
#3 Alamance 2017-11-18 20H 59M 0S  2017-11-18
#4 Alamance 2005-02-18  15H 3M 0S  2005-02-18
#5 Alamance 2008-03-23  21H 3M 0S  2008-03-23
#6 Alamance 2008-08-02         0S  2008-08-01
#7 Alamance 2007-12-21  3H 54M 0S  2007-12-20
#8 Alamance 2010-03-28     36M 0S  2010-03-27
#9 Alamance 2007-06-30 22H 17M 0S  2007-06-30

数据

data <- data.frame(Country = "Alamance", 
                   Date = c("8/11/2015","11/8/2012","11/18/2017","2/18/2005","3/23/2008","8/2/2008","12/21/2007","3/28/2010","6/30/2007"),
                   Time = c("17:38:00","15:52:00","20:59:00","15:03:00","21:03:00","0:00:00","3:54:00","0:36:00","22:17:00"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 2019-01-15
    • 2012-07-19
    • 2021-07-01
    相关资源
    最近更新 更多