2012-11-30 5 views
12

I 형식으로 날짜 문자열의 약 2 만 행이 포함 된 CSV 있습니다속도 향상 변환 POSIX.ct하는

2012/11/13 21:10:00 

가 전화를하자 그 csv$Date.and.Time

I 이 날짜 (및 수반되는 데이터)를 최대한 빨리 xts로 변환하려고합니다.

변환을 잘 수행하는 스크립트를 작성했는데 (아래 참조), 속도가 매우 느리고 속도를 높이고 싶습니다.최대한 많이

여기 현재 나의 방법론입니다. 누구든지 이것을 더 빨리 만드는 방법에 대한 제안이 있습니까?

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

idx <- format(dt,tz=z,usetz=TRUE) 

따라서이 날짜 문자열은 POSIX.ct으로 변환됩니다. 그런 다음 format을 사용하여 시간대 변환을 수행합니다 (z은 변환 할 TZ를 나타내는 변수입니다). 그런 다음 일반 xts 호출을 사용하여 ctsv의 나머지 데이터와 함께 xts 시리즈를 만듭니다.

이것은 100 % 작동합니다. 그것은 매우, 아주 천천히. 나는 이것을 병렬로 실행하려고 시도했다. (아무것도하지 않는다. '천천히'란 무엇을 의미합니까?

user system elapsed 
155.246 16.430 171.650 

이것은 3GhZ, 16GB RAM 2012 MB 프로에 있습니다. Win7 컴퓨터에서 32GB RAM을 사용하는 유사한 프로세서에서 절반 정도를 얻을 수 있습니다.

누군가가 더 좋은 아이디어를 가지고 있다고 확신합니다. Rcpp 등을 통해 제안 할 수 있습니다. 그러나 은 솔루션이 이상적으로 작동합니다. 데이터베이스를 설정하는 것과 같은 다른 방법이 아닌 csv를 사용하십시오.. 그렇게 말하면서, 나는 어떤 방법이 가장 빠른 전환을 제공 할 것인가를 통해이를 수행 할 것입니다.

나는 어떤 도움을 주셔서 감사합니다. 미리 감사드립니다.

+1

'as.POSIXct' 단계,'format' 단계 또는'xts' 단계가 느려지는 단계는 무엇인지 알고 계십니까? –

+0

빠른 시간 (Dirk의 답변 없이는 알지 못했을 것임)을 검색하면 몇 가지 유사한 Q [LINK1] (http://stackoverflow.com/questions/12898318/convert-character-to)를 찾을 수 있습니다. -date-soon-in-r), [LINK2] (http://stackoverflow.com/questions/12786335/why-is-as-date-slow-on-a-character-vector) – GSee

답변

18

Simon에 의해 작고 간단한 fasttime 패키지를 원한다. 가장 빠른 방법으로 이것을한다 --- 시간 분석 함수를 호출하지 않고 C 레벨 문자열 함수를 사용한다.

strptime과 같은 형식을 지원하지 않습니다. 사실 포맷 문자열조차 가지고 있지 않습니다. 그러나 형식이 올바른 ISO 형식 인 yyyy-mm-dd hh:mm:ss.fff이 작동하고 / 구분 기호가 올바르게 작동 할 수도 있습니다.

+0

나의 신 - 나 솔루션이 얼마나 효과적 일지에 대해 거의 놀라지는 않았지만 나는 이것으로 일했습니다! 정말 고맙습니다. 내가 너희들에게 수표를 어디서 보낼 까? –

+2

system.time (dts <- fastPOSIXct (csv $ Date.and.시간, "UTC")) 사용자 시스템이 만료되었습니다. 0.065 0.000 0.065 –

+0

일반적으로 어떤 작업을하고 있는지 알고있는 데 도움이되며, Simon에는 실제로 그 점에 대한 요령이 있습니다. :) –

2

정규식을 사용하여 모든 날짜 분석을 수행하므로 훨씬 빠르며 유연합니다.