Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R记号数据:将日期和时间合并到单个对象中_R_Statistics_Time Series_Finance - Fatal编程技术网

R记号数据:将日期和时间合并到单个对象中

R记号数据:将日期和时间合并到单个对象中,r,statistics,time-series,finance,R,Statistics,Time Series,Finance,我目前正在使用R处理tick数据,我想将日期和时间合并到一个对象中,因为我需要一个精确的时间对象来计算数据的一些统计信息。以下是我的数据的外观: 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 XXH1

我目前正在使用R处理tick数据,我想将日期和时间合并到一个对象中,因为我需要一个精确的时间对象来计算数据的一些统计信息。以下是我的数据的外观:

               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

基本上,我希望将“日期”和“时间”列合并为一个列。

使用
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"

当然,更优雅的解决方案(可以说)可以通过额外的包实现。处理日期时,它是润滑包:

library(lubridate)

with(x, ymd(date) + hms(time))
应该生成POSIXlt向量

更新:

使用通用日期和时间转换包的另一个解决方案<代码>任意时间< /C> >(基于C++库):

<>实际上,比较C++和<代码> > LuBuffe< /Cord>(值得考虑的是慢看)C++(<代码>任意时间< /代码>)获胜:


如果您指定了哪些统计信息,可能会有人提出比合并日期和时间更好的解决方案。@user1474263如果答案回答了您的问题,您应该单击此答案上的复选标记。可以说,在R中使用专用包的方式总是更优雅的—在本例中是lubridate.或使用(x,as.POSIXct(粘贴(日期,时间)))根据我的经验,
ymd
hms
比手动提供格式的其他选项慢得多。因此,在处理大数据时,我建议使用
as.POSIXct
(或
fastpime::fastPOSIXct
)。添加了
anytime
解决方案,其基准测试显示
anytime
运行最快。
 library(anytime)

 with(x, anytime(paste(date, time)))
 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