我用cut2
優先於cut
的原因是,其默認爲「右」是我期望它的工作(左閉區間)的方式。看看代碼,我發現當參數列表中出現'cuts'時,cut
函數與一組移動的剪輯一起使用,其效果是使間隔左閉合,然後代碼將因子重新映射爲將"("
的更改爲["
,但不會使用include.lowest = TRUE
。這具有將最後一個值變成<NA>
的效果。老實說,我認爲這是一個錯誤。仔細觀察後,我發現cut2
的幫助頁面不承諾處理Date
或date-time
對象,所以「錯誤」太強。它完全無法使用Date對象,它似乎只是一個與POSIXct對象幾乎正確的事故。 (這個實現對我來說有點令人驚訝,因爲我一直認爲它只是使用了cut(... , right=FALSE, include.lowest=TRUE)
。)
您可以改變代碼,我的一個想法是將範圍擴展回原始數據的右端點通過改變這一行:
r <- range(x, na.rm = TRUE)
這一行:
r <- range(c(x,max(x)+min(diff(x.unique))/2), na.rm = TRUE)
它不完全的結果,我期望的,因爲你在右端得到一個新的類別,因爲倒數第二區間仍然在右開。
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.lowest
= TRUE右= FALSE,實際上會變成include.highest
。而我正在摸索我的頭腦,爲什麼我實際上在這種情況下獲得了理想的行爲,因爲我不需要用'正確的'參數來做些什麼。我向Frank Harrell發送了一條消息,他願意考慮修改代碼來處理其他情況。我正在努力。
爲什麼這是一個問題:標籤爲cut.POSIXt
和cut.Date
不同的cut.numeric
(實際上cut.default
)結果的標籤。前兩種標籤策略只是重複間隔的開始,而來自cut.numeric
的標籤包括「[」和「)」以及間隔的結尾。比較這些輸出:
levels(cut(0+1:100, 3))
levels(cut(Sys.time()+1:100, 3))
levels(cut(Sys.Date()+1:100, 3))
+1!很好深入!只是一個問題'cut2'使用'cut'?所以你在內部使用'cut(x,k2,include.lowest = TRUE)'? – agstudy
'cut2'確實使用'cut',如果您修改它以使用include.lowest = TRUE,則可以擺脫NA返回的日期 - 時間值的問題。但是這並不能解決日期值的問題(因爲它們都會返回NA),我仍然在試圖找出問題。 –