1

この質問とは正反対の問題があります。sqldf日付をGMT/UTCから現地時間に変換しています。この動作を防ぐにはどうすればよいですか?注:lubridateパッケージを使用して、日付文字列をPOSIXctに変換します。

dates <- c("9/12/2010 0:25","9/12/2010 23:22","9/10/2010 1:55")
foo <- data.frame(dates=mdy_hm(dates))

戻り値

                dates
1 2010-09-12 00:25:00
2 2010-09-12 23:22:00
3 2010-09-10 01:55:00

一方

bar <- sqldf("SELECT * FROM foo")

戻り値

                dates
1 2010-09-11 19:25:00
2 2010-09-12 18:22:00
3 2010-09-09 20:55:00
4

1 に答える 1

1

sqldfの help-wiki は、日付を処理する方法の例を示しています。結果を数値に変換するには as を使用する必要があります。結果は processMethod に渡され、目的の形式に変換されます。

ここにあなたの例への適応があります。

dates <- c("9/12/2010 0:25","9/12/2010 23:22","9/10/2010 1:55")
foo <- data.frame(dates=mdy_hm(dates))
processDates <- function(data, ...) {
   ix <- grepl("_convert$", names(data))
   names(data)[ix] <- sub("_convert$", "", names(data)[ix])
   data[ix] <- lapply(data[ix], as.POSIXct, 
                      origin = "1970-01-01",
                      tz='UTC')
   data
   }

sqldf("select dates as newdates_convert from foo", method = processDates)

             newdates
1 2010-09-12 00:25:00
2 2010-09-12 23:22:00
3 2010-09-10 01:55:00
于 2013-02-23T01:52:00.843 に答える