将R中的字符快速转换为日期*

将R中的字符快速转换为日期*,r,date,character,posix,R,Date,Character,Posix,可能重复: 我有一个大的data.frame(大约60 mil的观测值),我使用RMySQL从数据库中读取。日期是以字符的形式输入的(似乎没有办法改变这一点),因此我使用as.Date将内容转换为日期。然而,这需要非常长的时间来进行如此多的观察。有什么办法可以让这更快吗?Simon Urbanek的库对于可解析日期时间的子集非常快: R> now <- Sys.time() R> now [1] "2012-10-15 10:07:28.981 CDT" R> fast

可能重复:

我有一个大的
data.frame
(大约60 mil的观测值),我使用
RMySQL
从数据库中读取。日期是以字符的形式输入的(似乎没有办法改变这一点),因此我使用
as.Date
将内容转换为日期。然而,这需要非常长的时间来进行如此多的观察。有什么办法可以让这更快吗?

Simon Urbanek的库对于可解析日期时间的子集非常快:

R> now <- Sys.time()
R> now
[1] "2012-10-15 10:07:28.981 CDT"
R> fasttime::fastPOSIXct(format(now))
[1] "2012-10-15 05:07:28.980 CDT"
R> as.Date(fasttime::fastPOSIXct(format(now)))
[1] "2012-10-15"
R> 

正如您所看到的,包没有任何外部依赖项,只有一个源文件和构建,没有任何问题。我们还可以看到,现在在CRAN上,答案写出来时不是这样的。有了它,Windows和OS X二进制文件现在确实存在于该页面上,即使您不从源代码处安装,安装也会像我一样简单。

将整个表转储到CSV中,然后使用
scan
拉入具有正确列类的表可能会更快。这听起来很俗气,但速度很快。@nograps:如果
read.csv
进行同样的转换,你会马上知道吗?这可能没什么区别。@BenBolker:实际上看了一下,但似乎没有解决办法。OP试图找出这是否是一个
数据表问题。。事实并非如此。我错过了什么吗?@Alex:说得好。我检查了一下,结果是一样的。这没什么区别。@Alex:如果我读对了答案,我想你确实漏掉了什么。Matthew Dowle的回答将问题追溯到
strtime
,OP对他自己问题的回答显示了他如何编写一些代码,将转换时间减少了约10倍……太棒了!这就是我一直在寻找的,然而,它只适用于>1970年的日期!!这是一个奇怪的限制。。必须与POSIX有关??fasttime需要更新以用于R3.1I,我相信Michael指的是构建。似乎没有适用于R3.1.0的二进制文件。你不是认真的吧。克兰很管用。如果您正在寻找一个不在CRAN上的包,那么您所需要的只是构建工具。
edd@max:~$ install.r fasttime
trying URL 'https://cran.rstudio.com/src/contrib/fasttime_1.0-1.tar.gz'
Content type 'application/x-gzip' length 2646 bytes
==================================================
downloaded 2646 bytes

* installing *source* package ‘fasttime’ ...
** package ‘fasttime’ successfully unpacked and MD5 sums checked
** libs
ccache gcc -I/usr/share/R/include -DNDEBUG      -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g  -O3 -Wall -pipe -pedantic -std=gnu99  -c tparse.c -o tparse.o
ccache gcc -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o fasttime.so tparse.o -L/usr/lib/R/lib -lR
installing to /usr/local/lib/R/site-library/fasttime/libs
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (fasttime)

The downloaded source packages are in
        ‘/tmp/downloaded_packages’
edd@max:~$