1

Hadley の "rbind.fill" 関数の動作について混乱しています。簡単な rbind 操作を実行したいデータ フレームのリストがありますが、rbind.fill 関数で説明できない結果が得られます。「rbind」関数によって、期待どおりの出力が得られることに注意してください。最小限の例を次に示します。

library(reshape)      
data1 <- structure(list(DATE = structure(c(1277859600, 1277856000), class = c("POSIXct", 
                   "POSIXt"), tzone = "GMT"), BACK = c(0, -1)), .Names = c("DATE", 
                    "BACK"), row.names = 1:2, class = "data.frame")
data2 <- structure(list(DATE = structure(c(1277856000, 1277852400), class = c("POSIXct", 
                   "POSIXt"), tzone = "GMT"), BACK = c(0, -1)), .Names = c("DATE", 
                    "BACK"), row.names = 1:2, class = "data.frame")
bind1 <- rbind.fill(list(data1, data2))
bind2 <- rbind(data1, data2)
data1
data2
bind1
bind2
                 DATE BACK
1 2010-06-30 01:00:00    0
2 2010-06-30 00:00:00   -1
                 DATE BACK
1 2010-06-30 00:00:00    0
2 2010-06-29 23:00:00   -1
                 DATE BACK
1 2010-06-29 18:00:00    0
2 2010-06-29 17:00:00   -1
3 2010-06-29 17:00:00    0
4 2010-06-29 16:00:00   -1
                 DATE BACK
1 2010-06-30 01:00:00    0
2 2010-06-30 00:00:00   -1
3 2010-06-30 00:00:00    0
4 2010-06-29 23:00:00   -1

ご覧のbind1とおり、出力が含まれていると、元のデータセットにはなかっrbind.fillた新しい時間がDATE列に作成されます。これは予想される動作ですか?
bind <- do.call(rbind, list(data1, data2))
私が持っている5000以上のデータフレームをバインドするために単純に使用できることは承知していますが、誰もが前述の動作について話すことができますか?
ありがとうございました。

編集:
@DWin が以下で指摘したように、これは rbind.fill 関数自体の問題ではなく、出力では時刻が太平洋時間で印刷されていたが、GMT 形式であったという事実です。

SessionInfo()
R version 2.12.1 (2010-12-16)
Platform: x86_64-pc-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] tcltk     grid      stats     graphics  grDevices utils     datasets  methods  
[9] base     

other attached packages:
[1] tcltk2_1.1-5  reshape_0.8.4 plyr_1.4      proto_0.3-9.1

loaded via a namespace (and not attached):
[1] ggplot2_0.8.9 tools_2.12.1 
4

1 に答える 1

2

ほとんどの場合、表示されているのは、マシンのタイムゾーン設定と相互作用するprint.POSIXctの動作です。2つの関数呼び出しでまったく同じ出力が得られます。

> rbind.fill(list(data1,data2)) == rbind(data1,data2)
  DATE BACK
1 TRUE TRUE
2 TRUE TRUE
3 TRUE TRUE
4 TRUE TRUE
> identical( rbind.fill(list(data1,data2)) ,  rbind(data1,data2) )
[1] TRUE

グリニッジ標準時では、POSIXct時間はデフォルトであると合理的に確信しています。as.POSIXttz引数があることに注意してください。

tz   A timezone specification to be used for the conversion, if one is required. 
     System-specific (see time zones), but "" is the current timezone, and "GMT" is 
     UTC (Universal Time, Coordinated).

と入力?localesすると、ロケール設定を取得および設定するための関数が表示されますが、これらはOSによって異なります。そのため、Macでの私の経験は別のOSでの経験と一致しない場合があります。POSIXクラスではなくDateクラスを使用しようとしていますが、それは、追加された時間レベルの詳細が特に必要ないためです。chronlubridateパッケージには、調べたい追加の機能があります。

于 2011-05-23T18:14:22.647 に答える