相关疑难解决方法(0)

为什么as.Date在字符向量上变慢?

我开始在R中使用data.table包来提高代码的性能.我使用以下代码:

sp500 <- read.csv('../rawdata/GMTSP.csv')
days <- c("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")

# Using data.table to get the things much much faster
sp500 <- data.table(sp500, key="Date")
sp500 <- sp500[,Date:=as.Date(Date, "%m/%d/%Y")]
sp500 <- sp500[,Weekday:=factor(weekdays(sp500[,Date]), levels=days, ordered=T)]
sp500 <- sp500[,Year:=(as.POSIXlt(Date)$year+1900)]
sp500 <- sp500[,Month:=(as.POSIXlt(Date)$mon+1)]
Run Code Online (Sandbox Code Playgroud)

我注意到as.Date函数完成的转换非常慢,与其他创建工作日的函数相比,等等.为什么会这样?是否有更好/更快的解决方案,如何转换为日期格式?(如果你问我是否真的需要日期格式,可能是的,因为然后使用ggplot2制作情节,这就像这种类型数据的魅力一样.)

更确切地说

> system.time(sp500 <- sp500[,Date:=as.Date(Date, "%m/%d/%Y")])
   user  system elapsed 
 92.603   0.289  93.014 
> system.time(sp500 <- sp500[,Weekday:=factor(weekdays(sp500[,Date]), levels=days, ordered=T)])
   user  system elapsed 
  1.938   0.062   2.001 
> system.time(sp500 <- sp500[,Year:=(as.POSIXlt(Date)$year+1900)])
   user  system elapsed 
  0.304   0.001   0.305 
Run Code Online (Sandbox Code Playgroud)

在MacAir i5上,观测值略低于3000000.

谢谢

r data.table

27
推荐指数
4
解决办法
5575
查看次数

将200万行日期字符串加速转换为POSIX.ct

我有一个csv,其中包含大约200万行日期字符串格式:

2012/11/13 21:10:00 
Run Code Online (Sandbox Code Playgroud)

让我们称呼它 csv$Date.and.Time

我想尽快将这些日期(及其附带的数据)转换为xts

我编写了一个脚本,可以很好地执行转换(见下文),但它非常慢,我想尽可能加快速度.

这是我目前的方法.有没有人对如何加快速度提出任何建议?

 dt <- as.POSIXct(csv$Date.and.Time,tz="UTC")

idx <- format(dt,tz=z,usetz=TRUE)
Run Code Online (Sandbox Code Playgroud)

因此脚本将这些日期字符串转换为POSIX.ct.然后使用format(z是表示我要转换的TZ的变量)进行时区转换.然后我做一个常规xts调用,使其成为xts系列,其中包含csv中的其余数据.

这100%工作.它非常非常慢.我试过并行运行它(它没有做任何事情;如果有什么事情让它变得更糟)."慢"是什么意思?

 user    system   elapsed 
155.246  16.430 171.650 
Run Code Online (Sandbox Code Playgroud)

这是一款3GhZ,16GB RAM 2012 mb pro.我可以在Win7机器上使用32GB RAM的类似处理器上获得大约一半

我确信有人有更好的想法 - 我愿意接受建议Rcpp等等.但是,理想情况下,解决方案适用于csv而不是其他一些方法,比如设置数据库.话虽如此,我愿意通过任何方法来实现这一目标,以实现最快的转换.

我非常感谢任何帮助.提前致谢.

posix r time-series posixct xts

12
推荐指数
1
解决办法
2075
查看次数

提高data.table日期+粘贴时间的性能?

我不确定我可以在这里提出这个问题,让我知道我是否应该在其他地方这样做.

我有一个data.table,其中包含1e6行,具有以下结构:

        V1       V2     V3
1: 03/09/2011 08:05:40 1145.0
2: 03/09/2011 08:06:01 1207.3
3: 03/09/2011 08:06:17 1198.8
4: 03/09/2011 08:06:20 1158.4
5: 03/09/2011 08:06:40 1112.2
6: 03/09/2011 08:06:59 1199.3
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码将V1和V2变量转换为唯一的datetime变量:

 system.time(DT[,`:=`(index= as.POSIXct(paste(V1,V2),
                         format='%d/%m/%Y %H:%M:%S'),
                     V1=NULL,V2=NULL)])

   user  system elapsed 
   47.47    0.16   50.27 
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以改善这种转变的表现?

这里dput(head(DT)):

DT <- structure(list(V1 = c("03/09/2011", "03/09/2011", "03/09/2011", 
"03/09/2011", "03/09/2011", "03/09/2011"), V2 = c("08:05:40", 
"08:06:01", "08:06:17", "08:06:20", "08:06:40", "08:06:59"), 
    V3 = c(1145, 1207.3, 1198.8, 1158.4, 1112.2, 1199.3)), .Names = c("V1", 
"V2", "V3"), class = c("data.table", "data.frame"), …
Run Code Online (Sandbox Code Playgroud)

performance r posixct data.table

7
推荐指数
1
解决办法
1023
查看次数

在R中有更快的替代POSIXct吗?

我正在读取CSV fread(因为它比read_csv方法更快),时间戳列被视为character类型.

我想将其转换为POSIXct: as.POSIXct(strptime(rawTime, "%Y-%m-%d %H:%M:%OS"))

但是这个POSIXct电话很慢.

在此输入图像描述

有没有更快的替代?

r posixct

2
推荐指数
1
解决办法
613
查看次数

R中更快的日期格式?

我经常需要将(长)字符串转换为 R 中的日期类。我注意到这一步似乎很慢。

例子:

date <- c("5/31/2013 23:30", "5/31/2013 23:35", "5/31/2013 23:40", "5/31/2013 23:45", "5/31/2013 23:50", "5/31/2013 23:55")

Date <- as.POSIXct(date, format="%m/%d/%Y %H:%M")
Run Code Online (Sandbox Code Playgroud)

这不是一个大问题,但我想知道我是否忽略了提高效率的简单途径。有什么提示可以加快速度吗?谢谢。

performance r date posixct

1
推荐指数
1
解决办法
1716
查看次数

标签 统计

r ×5

posixct ×4

data.table ×2

performance ×2

date ×1

posix ×1

time-series ×1

xts ×1