R刻度数据:将日期和时间合并到一个对象中
Posted
技术标签:
【中文标题】R刻度数据:将日期和时间合并到一个对象中【英文标题】:R tick data : merging date and time into a single object 【发布时间】:2012-07-21 11:53:13 【问题描述】:我目前正在使用 R 处理刻度数据,我想将日期和时间合并到一个对象中,因为我需要获得一个精确的时间对象来计算我的数据的一些统计信息。这是我的数据的样子:
date time price flag exchange
2 XXH10 2010-02-02 08:00:03 2787 1824 E
3 XXH10 2010-02-02 08:00:04 2786 3 E
4 XXH10 2010-02-02 08:00:04 2787 6 E
5 XXH10 2010-02-02 08:00:04 2787 1 E
6 XXH10 2010-02-02 08:00:04 2787 1 E
基本上,我想将“日期”和“时间”列合并为一个。
【问题讨论】:
如果您指定哪些统计信息,有人可能会提出比合并日期和时间更好的解决方案。 【参考方案1】:使用as.POSIXct
创建一个datetime
对象:
as.POSIXct(paste(x$date, x$time), format="%Y-%m-%d %H:%M:%S")
[1] "2010-02-02 08:00:03 GMT" "2010-02-02 08:00:04 GMT" "2010-02-02 08:00:04 GMT"
[4] "2010-02-02 08:00:04 GMT" "2010-02-02 08:00:04 GMT"
【讨论】:
@user1474263 如果它回答了您的问题,您应该单击此答案上的复选标记。 可以说,在 R 中总是有更优雅的方式使用专门的包 - 在这种情况下是 lubridate。 或者只是with(x, as.POSIXct(paste(date, time)))
【参考方案2】:
当然,更优雅的解决方案(可以说)可以使用额外的包。使用日期时,它是 lubridate 包:
library(lubridate)
with(x, ymd(date) + hms(time))
应该产生POSIXlt向量。
更新:
还有另一种使用通用日期时间转换包anytime
(基于C++库Boost date_time)的解决方案:
library(anytime)
with(x, anytime(paste(date, time)))
确实,将anytime
与基本 R 和 lubridate
进行比较(理所当然地认为相当慢 - 请参阅 Why are my functions on lubridate dates so slow?)C++ (anytime
) 胜出:
x = read.csv(text = 'date,time
2010-02-02,08:00:03
2010-02-02,08:00:04
2010-02-02,08:00:04
2010-02-03,08:00:04
2010-02-04,08:00:05
2010-02-04,08:00:05
2010-02-04,08:00:06
2010-02-04,08:00:07
2010-02-04,08:00:08
2010-02-04,08:00:14')
microbenchmark::microbenchmark(
base = with(x, as.POSIXct(paste(date, time), format="%Y-%m-%d %H:%M:%S")),
anytime = with(x, anytime::anytime(paste(date, time))),
lubri = with(x, lubridate::ymd(date) + lubridate::hms(time)),
times = 1000L
)
Unit: microseconds expr min lq mean median uq max neval base 71.163 91.2555 104.38747 104.785 112.1185 256.997 1000 anytime 40.508 52.5385 63.46973 61.843 68.5730 221.076 1000 lubri 1596.490 1850.4400 2235.34254 1909.588 2033.096 110751.622 1000
【讨论】:
根据我的经验,ymd
和 hms
比您手动提供格式的其他选项要慢得多。所以在处理大数据时,我会推荐as.POSIXct
(或fasttime::fastPOSIXct
)。
添加了anytime
解决方案,其基准显示anytime
运行速度最快。以上是关于R刻度数据:将日期和时间合并到一个对象中的主要内容,如果未能解决你的问题,请参考以下文章