【问题标题】:How do I manipulate a datetime variable imported from Excel into R如何操作从 Excel 导入 R 的日期时间变量
【发布时间】:2018-06-02 23:27:59
【问题描述】:

我正在使用readxl 将多个 Excel 工作表导入 R。这些表中的每一个都包含对事务的观察,其中包括 DateOfEventTimeOfEvent 字段。

当我导入时间字段时,R 会根据 Excel 第 0 天的日期将其转换为 POSIXct 对象 - 即1899-12-31 0:0:0

例如dat <- data.frame(date=Sys.Date()+0:1, time=as.POSIXct(c(10,11), origin="1899-12-31"))

使用数据框中的数据,使用dplyr 步骤清理我的数据,我将如何 -

  • 使用 lubridate 使用 DateOfEvent 值重新编码变量的日期部分?
  • 保留时间但使其独立于日期,以便我可以比较不同日期时间段中发生的事件(即删除 1899 年的日期,但格式化日期以便我可以执行跨日比较)?

【问题讨论】:

  • 你能提供几个示例行吗?类似:dat <- data.frame(date=Sys.Date()+0:1, time=as.POSIXct(c(10,11), origin="1899-12-31")) 是否涵盖了您的情况?如果是这样,请将其编辑到您的问题中。
  • 是的;这将提供一个合适的样本。我会修改问题。

标签: r dplyr lubridate


【解决方案1】:

使用update() 更改time 中的年份。
如果您只想从time 中提取时间对象,请使用hms::as.hms()(这将转换为UTC):

library(tidyverse)

dat %>% 
  mutate(time = update(time, 
                       year = year(date), 
                       month = month(date), 
                       day = day(date)),
         hms = hms::as.hms(time))

        date                time      hms
1 2018-06-02 2018-06-02 16:00:10 23:00:10
2 2018-06-03 2018-06-03 16:00:11 23:00:11

【讨论】:

  • 谢谢安德鲁 - 这就是我所追求的。遗憾的是 lubridate update fctn 不接受整个日期,而不必突破到年、月、日 - 例如更新(时间,日期 = 日期(DateX))。
猜你喜欢
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 2016-08-17
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多