【问题标题】:R - Convert Date Time as character into Seconds (numeric)R - 将日期时间作为字符转换为秒(数字)
【发布时间】:2016-10-17 09:52:51
【问题描述】:

我正在从如下存储的 csv 文件中读取数据时间值

"2013-08-01 00:10:46"
"2013-08-01 00:10:51"
"2013-08-01 00:10:53"
"2013-08-01 00:11:04"
"2013-08-01 00:11:06"

读取时它被读取为字符,我想将其转换为 1970-01-01 的秒数。我可以使用下面的代码行来实现它,但转换需要很长时间。有没有更好更快的方法来实现这一点

rstarttime  <- as.numeric(as.POSIXct(rdata$starttime,origin = "1970-01-01"))

【问题讨论】:

  • 你可以试试fasttime 包,它非常快:)

标签: r date


【解决方案1】:

您可以使用lubridate

根据下面的测试,可以快12倍左右:

library(lubridate)
ttt <- c(
    "2013-08-01 00:10:46",
    "2013-08-01 00:10:51",
    "2013-08-01 00:10:53",
    "2013-08-01 00:11:04",
    "2013-08-01 00:11:06"
)

t <- Sys.time()
q <- as.numeric(as.POSIXct(rep(ttt,50000),origin = "1970-01-01"))
t1 <- Sys.time() - t

t <- Sys.time()
q <- time_length(interval(ymd("1970-01-01"), rep(ttt, 50000)), "second")
t2 <- Sys.time() - t

我为 t1t2 获得的值分别是 6 秒和 0.5 秒。所以lubridate 的执行速度快了大约 12 倍。

【讨论】:

  • time_length 是 lubridate 包中的函数吗?运行此代码时出错
  • 是的,CRAN 中手册的第 56 页this link。错误是什么?
  • 我收到此错误 - 错误:找不到函数“time_length”。奇怪
  • 您可能拥有以前版本的 lubridate。尝试重新安装它:install.packages("lubridate") 并重新运行代码。
猜你喜欢
  • 2011-07-11
  • 1970-01-01
  • 2015-05-20
  • 2017-09-14
  • 2022-08-18
  • 2022-07-06
  • 2017-05-01
  • 1970-01-01
  • 2017-10-11
相关资源
最近更新 更多