2016-01-25 5 views
7

は、私は次のようにフォーマットされています私のデータにタイムスタンプ、列Timelocalを持っている:dplyrとRPostgreSQLを使用して文字の日付時間を使用可能に変換するにはどうすればよいですか?

2015-08-24T00:02:03.000Z 

通常、私は私が使用できる日付フォーマットに変換するために、この形式を変換するには、次の行を使用します。

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") 

これは私のマシンで正常に動作します。問題は、私は現在、はるかに大きなデータフレームで作業していることです。これはRedshiftクラスタ上にあり、RPostgreSQLパッケージを使用してアクセスしています。私はdplyrを使ってデータを操作しています。オンラインのドキュメンテーションではRPostgreSQLとうまく対戦していることを示しています。

日付の形式を変換する以外はそうです。私は文字フォーマットを時間フォーマットに変換したいと思います。 TimelocalはRedshiftに "varchar"として読み込まれました。したがって、Rはそれを文字フィールドとして解釈しています。

私は次のことを試してみた:

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

1を試してみてください - 簡単dplyr構文に

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

を使用して、2を試してみてください - 別のオンラインリファレンスコード

からdplyr構文を使用して
elevate %>% 
    mutate(timelocalnew = timelocal %>% fast_strptime("%Y-%m-%dT%H:%M:%S",tz="UTC") %>% as.character()) %>% 
    filter(!is.na(timelocalnew)) 

3を試してみてください - 私はここからのコードを適応しようとしているのstrptimeの代わりfast_strptime

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

を使用して:それはそれのstrptimeを思わ

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 

:のでhttp://www.markhneedham.com/blog/2014/12/08/r-dplyr-mutate-with-strptime-incompatible-sizewrong-result-size/

私の試みはerroringされていますRPostgreSQLと互換性がありません。これは正しい解釈ですか?もしそうなら、これはデータがRedshift上にある場合、R内の日付フォーマットを処理する手段がないことを意味しますか?私はRPostgreSQLパッケージのドキュメントをチェックし、時間フォーマットの指定に関連するものは何も見ていませんでした。

dplyrとRpostgreSQLで正しくフォーマットされた日付時刻列を取得するためのアドバイスをお寄せいただきありがとうございます。

答えて

0

以下は機能しますか?

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

従来のR関数はここでは機能しません。
dplyrdbplyrの最新バージョンで進化してきたSQL変換を使用する必要があります。
次私の仕事:

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

注、私はAWS赤方偏移を使用しています。

関連する問題