1

データフレームをExcelファイルに書き込もうとしています。サンプル データフレームは次のとおりです。タイムスタンプは classであるため、lubridate パッケージを使用して形式 factorに変換します。POSIXct

library(lubridate)
library(xlsx)
df=structure(list(ts = structure(c(5L, 8L, 9L, 1L, 6L, 7L, 4L, 2L, 3L),
 .Label = c("01.09.2016 10:56:56", "01.09.2016 11:04:37", 
"01.09.2016 12:03:59", "02.09.2016 08:47:01", "30.08.2016 08:27:28", 
"30.08.2016 16:08:56", "31.08.2016 07:38:43", "31.08.2016 10:26:53",
"31.08.2016 10:37:40"), class = "factor")), .Names = "ts", 
row.names = c(NA,-9L), class = "data.frame")
df$ts = as.POSIXct(strptime(df$ts, "%d.%m.%Y %H:%M:%S"))
write.xlsx(df, "output.xlsx", sheetName="output")

コマンドを使用してデータフレームを Excel ファイルに書き込もうとするとwrite.xlsx、タイムスタンプが元のものと異なる出力が得られます。 R データフレームと Excel の出力

時刻が 2 時間ずれていることがわかります。私はタイムゾーン UTC+02:00 に属する地域に住んでいます。これが変化に影響を与える要因でしょうか?もしそうなら、ExcelがUTCオフセットに従って時間情報を変更するのを防ぐ方法はありますか?

4

1 に答える 1

3

R データ フレームのデータのタイムゾーンは CEST です。Excel に書き込むと、Excel は自動的にタイムゾーンを GMT に変更し、Excel で時間のずれが発生します。1 つの回避策は、時刻データを変更せずに R のタイムゾーンを GMT に変更することforce_tzです。

df$ts = as.POSIXct(strptime(df$ts, "%d.%m.%Y %H:%M:%S"))
Sys.setenv(TZ="")    
df$ts = force_tz(df$ts,tzone="GMT")
write.xlsx(df, "output.xlsx", sheetName="output")
于 2016-09-20T09:03:32.697 に答える