簡體   English   中英

在R中使用`cut`合並數據時出錯

[英]Error when binning data using `cut` in R

我正在嘗試將值介於1到100,000之間的變量按10,000分為十組。 我正在使用以下代碼並出現錯誤。

cut(x, breaks = quantile(x, probs=seq(0, 100000, 10000)), include.lowest = TRUE)

我究竟做錯了什么?

好吧,起初我認為這是一個錯字,但經過評論中的一些討論后,我決定寫一個答案。

誤差發生在quantile ,因為probs應該在0到1之間(讀量為?quantile )。


您似乎對以下兩個感到困惑:

cut(x, breaks = seq(0, 100000, 10000), include.lowest = TRUE)
cut(x, breaks = quantile(x, prob = seq(0, 1, 0.1)), include.lowest = TRUE)

正如我所說,它們將給出不同的結果,尤其是當您的數據分布不均勻時。

作為一個代表性示例,請考慮非均勻分布的數據,例如Beta分布:

set.seed(0)
x <- rbeta(10000, 3, 5)

b1 <- seq(0, 1, 0.1)

b2 <- quantile(x, prob = seq(0, 1, 0.1), names = FALSE)
round(b2, 2)
# [1] 0.01 0.17 0.23 0.28 0.32 0.37 0.41 0.46 0.52 0.60 0.94

注意, b2b1之間的差異很大。 您可以檢查(經驗)分位數圖:

plot(b1, b2); abline(0, 1)

您將看到點與線的偏離很大。

在上面, b1給出統一的bin單元,而b2給出參差不齊的bin單元。 現在考慮垃圾箱計數:

table(cut(x, breaks = b1, include.lowest = TRUE))
#  [0,0.1] (0.1,0.2] (0.2,0.3] (0.3,0.4] (0.4,0.5] (0.5,0.6] (0.6,0.7] (0.7,0.8] 
#      256      1239      2011      2242      1948      1323       685       245 
#(0.8,0.9]   (0.9,1] 
#       48         3 

table(cut(x, breaks = b2, include.lowest = TRUE))
#[0.0101,0.169]  (0.169,0.228]  (0.228,0.276]  (0.276,0.321]  (0.321,0.365] 
#          1000           1000           1000           1000           1000 
# (0.365,0.412]  (0.412,0.463]  (0.463,0.519]  (0.519,0.598]  (0.598,0.935] 
#          1000           1000           1000           1000           1000 

你看到區別了嗎? 如果我們按分位數放置斷點,則將對箱進行統一計數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM