2016-01-25 6 views
7

Ich habe Zeitstempel, Spalte Timelocal in meine Daten, die formatiert ist wie folgt:Wie konvertiert man die Datumseingabe eines Charakters, um mit dplyr und RPostgreSQL verwendbar zu sein?

2015-08-24T00:02:03.000Z 

Normalerweise verwende ich die folgende Zeile dieses Format zu konvertieren es in ein Datumsformat konvertieren ich verwenden kann.

timestamp2 = "2015-08-24T00:02:03.000Z" 
timestamp2_formatted = strptime(timestamp2,"%Y-%m-%dT%H:%M:%S",tz="UTC") 
    # also works for dataframes (my main use of it) 
     df$TimeNew = strptime(df$TimeLocal,"%Y-%m-%dT%H:%M:%S",tz="UTC") 

Dies funktioniert auf meiner Maschine. Das Problem ist, ich arbeite jetzt mit einem viel größeren Datenrahmen. Es befindet sich auf einem Redshift-Cluster und ich verwende den RPostgreSQL-Paket. Ich verwende dplyr, um Daten zu manipulieren, da die Online-Dokumentation anzeigt, dass sie gut mit RPostgreSQL zusammenspielt.

Es scheint, außer dem Konvertieren des Datumsformats. Ich möchte das Zeichenformat in ein Zeitformat konvertieren. Timelocal wurde in Redshift als "varchar" eingelesen. Daher interpretiert R es als ein Zeichenfeld.

Ich habe versucht, die folgenden:

library(dplyr) 
library(RPostgreSQL) 
library(lubridate) 

versuchen 1 - mit leicht dplyr Syntax

mutate(elevate, timelocalnew = fast_strptime(timelocal, "%Y-%m-%dT%H:%M:%S",tz="UTC")) 

versuchen 2-

dplyr Syntax von einem anderen Online-Referenzcode
elevate %>% 
    mutate(timelocalnew = timelocal %>% fast_strptime("%Y-%m-%dT%H:%M:%S",tz="UTC") %>% as.character()) %>% 
    filter(!is.na(timelocalnew)) 

versuchen 3 - strptime statt fast_strptime

elevate %>% 
    mutate(timelocalnew = timelocal %>% strptime("%Y-%m-%dT%H:%M:%S",tz="UTC") %>% as.character()) %>% 
    filter(!is.na(timelocalnew)) 

I-Code versuche von hier mit anzupassen: http://www.markhneedham.com/blog/2014/12/08/r-dplyr-mutate-with-strptime-incompatible-sizewrong-result-size/

Meine Versuche sind erroring weil:

Error in postgresqlExecStatement(conn, statement, ...) : 
    RS-DBI driver: (could not Retrieve the result : ERROR: syntax error at or near "AS" 
LINE 1: ...CAST(STRPTIME("timelocal", '%YSuccess2048568264T%H%M�����', 'UTC' AS "tz") A... 
                  ^
) 
In addition: Warning messages: 
1: In postgresqlQuickSQL(conn, statement, ...) : 
    Could not create executeSELECT count(*) FROM (SELECT "timelocal", "timeutc", "zipcode", "otherdata", "country", CAST(STRPTIME("timelocal", '%Y%m%dT%H%M%S', 'UTC' AS "tz") AS TEXT) AS "timelocalnew" 
FROM "data") AS "master" 
2: Named arguments ignored for SQL STRPTIME 

Es wäre, dass strptime scheinen ist nicht kompatibel mit RPostgreSQL. Ist das die richtige Interpretation? Wenn ja, bedeutet das, dass es keine Möglichkeit gibt, Datumsformate in R zu verarbeiten, wenn sich die Daten auf Redshift befinden? Ich habe die Dokumentation des RPostgreSQL-Pakets überprüft und nichts mit der Angabe von Zeitformaten gesehen.

Wir würden uns freuen, wenn Sie Ratschläge zum korrekten Formatieren von Datumszeitspalten mit dplyr und RpostgreSQL erhalten.

Antwort

0

Funktioniert Folgendes?

as.Date(strptime(timelocal,format = "%YYYY/%MM/%DD %H:%M:%OS"),tz="UTC") 
0

Traditionelle R-Funktionen funktionieren hier nicht.
Ihr sollte mit SQL-Übersetzung gehen, die in den neuesten Versionen von dplyr und dbplyr entwickelt wurde.
Folgendes für mich gearbeitet:

library(dbplyr) 
mutate(date = to_date(timestamp2, 'YYYY-MM-DD')) 

Hinweis, ich AWS Redshift verwenden.

Verwandte Themen