【问题标题】:How can I alter the date of a datetime vector depending on the time with lubridate?如何根据使用 lubridate 的时间更改日期时间向量的日期?
【发布时间】:2020-06-23 13:33:11
【问题描述】:

我正在尝试根据一天中的时间来操作日期时间向量中的日期。

向量 newmagic 中的每个项目都类似于“2020-03-05 02:03:54 UTC” 对于时间在 19:00 到 23:59 之间的所有项目,我想回去一天。

我试着写一个 if 语句:

if(hour(newmagic)>=19&hour(newmagic)<=23){
  date(newmagic)<-date(newmagic)-1
}

没有输出,但是

警告信息:在 if (hour(newmagic) >= 19 & hour(newmagic) 1,只有第一个元素是 用过

当我将数据限制为条件并简单地执行 date()-1

newmagic[hour(newmagic)>=19&hour(newmagic)<=23&!is.na(newmagic)] <- date(newmagic[hour(newmagic)>=19&hour(newmagic)<=23&!is.na(newmagic)])-1

输出确实删除了 1 天,但也将时间设置为 0 原文:

“2020-03-07 20:58:00 UTC”

在 date()-1 之后

“2020-03-06 00:00:00 UTC”

我真的不知道该怎么做。 我如何调整 if 语句,使其真正按照我的意图执行? 如何重写第二种方法中的限制,以使时间本身保持不变?

感谢您的帮助

【问题讨论】:

    标签: r if-statement lubridate


    【解决方案1】:

    您可以在您的原始数据集中进行尝试。我用过lubridatetidyverse 包裹。最初,我将数据框拆分为日期和时间。然后我将变量转换为日期和时间格式并使用ifelse 条件。

    代码和输出如下:-

    library(tidyverse)
    library(lubridate)
    ab <- data.frame(ymd_hms(c("2000-11-01 2:23:15", "2028-03-25 20:47:51",
                               "1990-05-14 22:45:30")))
    colnames(ab) <- paste(c("Date_time"))
    ab <- ab %>% separate(Date_time, into = c("Date", "Time"), 
                    sep = " ", remove = FALSE)
    ab$Date <- as.Date(ab$Date)
    ab$Time <- hms(ab$Time)
    ab$date_condition <- ifelse(hour(ab$Time) %in% c(19,20,21,22,23),
                                ab$date_condition <- ab$Date -1,
                                ab$date_condition <- ab$Date)       
    ab$date_condition <- as.Date(ab$date_condition, format = "%Y-%m-%d", 
                                 origin = "1970-01-01")
    ab
    
    
    
    
    #           Date_time       Date        Time date_condition
    1 2000-11-01 02:23:15 2000-11-01  2H 23M 15S     2000-11-01
    2 2028-03-25 20:47:51 2028-03-25 20H 47M 51S     2028-03-24
    3 1990-05-14 22:45:30 1990-05-14 22H 45M 30S     1990-05-13
    

    【讨论】:

    • 谢谢,看来有必要拆分日期和时间列
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2020-01-20
    相关资源
    最近更新 更多