cut2私が優先して使用する理由cutは、「右」のデフォルトが、私が期待する方法 (左閉間隔) であるためです。コードを見ると、引数リストに「カット」が存在する場合、cut関数は、間隔を左閉じにする効果を持つカットのシフトされたセットで使用され、コードは変更する要因を再ラベル付けすることがわかりますは"("to["ですが、その後は使用しませんinclude.lowest = TRUE。これには、最後の値を に変える効果があります<NA>。率直に言って、これはバグだと思います。これをもっと詳しく見てみると、ヘルプページはどちらかまたはcut2どちらかを処理することを約束していないことがわかりますDatedate-timeオブジェクトなので、「バグ」が強すぎます。Date オブジェクトでは完全に失敗し、POSIXct オブジェクトではほぼ正しいのは単なる偶然のようです。(この実装は、私が常に を使用しているだけだと思っていたので、私にとってはやや驚くべきものですcut( ... , right=FALSE, include.lowest=TRUE)。)
コードを変更することができます。私が考えた 1 つのアイデアは、次の行を変更して、範囲を元のデータの右の終点まで拡張することでした。
r <- range(x, na.rm = TRUE)
この行に:
r <- range(c(x,max(x)+min(diff(x.unique))/2), na.rm = TRUE)
最後から 2 番目の間隔がまだ右側に開いているため、右端に新しいカテゴリが表示されるため、これはまさに私が期待した結果ではありません。
intervals <- cut3(x=data.points, cuts=cut.points, minmax=TRUE)
> tail(intervals, 1)
[1] 2013-07-16 14:55:14
61 Levels: [2013-07-16 13:55:14,2013-07-16 13:56:14) ...
> tail(intervals, 2)
[1] [2013-07-16 14:54:14,2013-07-16 14:55:14) 2013-07-16 14:55:14
61 Levels: [2013-07-16 13:55:14,2013-07-16 13:56:14) ...
別のアイデアは、より満足のいく結果をもたらします。次の行のみを変更します。
y <- cut(x, k2)
これに:
y <- cut(x, k2, include.lowest=TRUE)
予想される右と左の閉区間と NA なしを与える:
tail(intervals, 2)
[1] [2013-07-16 14:54:14,2013-07-16 14:55:14] [2013-07-16 14:54:14,2013-07-16 14:55:14]
60 Levels: [2013-07-16 13:55:14,2013-07-16 13:56:14) ...
注: include.lowestright=FALSE の =TRUE は、実際には になりinclude.highestます。そして、「正しい」パラメーターで何かをする必要もなかったのに、この場合、実際に望ましい動作が得られた理由について頭を悩ませています。私は Frank Harrell にメッセージを送りました。彼は、他のケースを処理するためにコードを修正することを喜んで検討します。私はそれに取り組んでいます。
これが問題である理由:および のラベル付けは、 (実際には) 結果のラベル付けcut.POSIXtとcut.Date は異なります。前者の 2 つのラベルの戦略は、間隔の開始部分だけを再プロットすることですが、ラベル付けには "[" と ")" および間隔の終了部分が含まれます。これらの出力を比較します。cut.numericcut.defaultcut.numeric
levels( cut(0+1:100, 3) )
levels( cut(Sys.time()+1:100, 3) )
levels( cut(Sys.Date()+1:100, 3) )