2013-11-09 55 views
2

我需要對4個類中的連續變量進行分類,每個類具有相同數量的觀察值。我已經使用了功能如何在R中對4個相同大小的連續變量進行分類?

cut(x, breaks = quantile(x,probs=seq(0,1,0.25)),include.lowest=TRUE,right=FALSE))

我的問題是,在每個類別的觀察次數是不完全一樣的,因爲有意見(和一個以上的),它具有完全位數的值相同。我該怎麼做?

我的可變等待

[1] 79 54 74 62 85 55 88 85 51 85 54 84 78 47 83 52 62 84 52 79 51 47 78 69 74 
[26] 83 55 76 78 79 73 77 66 80 74 52 48 80 59 90 80 58 84 58 73 83 64 53 82 59 
[51] 75 90 54 80 54 83 71 64 77 81 59 84 48 82 60 92 78 78 65 73 82 56 79 71 62 
[76] 76 60 78 76 83 75 82 70 65 73 88 76 80 48 86 60 90 50 78 63 72 84 75 51 82 
[101] 62 88 49 83 81 47 84 52 86 81 75 59 89 79 59 81 50 85 59 87 53 69 77 56 88 
[126] 81 45 82 55 90 45 83 56 89 46 82 51 86 53 79 81 60 82 77 76 59 80 49 96 53 
[151] 77 77 65 81 71 70 81 93 53 89 45 86 58 78 66 76 63 88 52 93 49 57 77 68 81 
[176] 81 73 50 85 74 55 77 83 83 51 78 84 46 83 55 81 57 76 84 77 81 87 77 51 78 
[201] 60 82 91 53 78 46 77 84 49 83 71 80 49 75 64 76 53 94 55 76 50 82 54 75 78 
[226] 79 78 78 70 79 70 54 86 50 90 54 54 77 79 64 75 47 86 63 85 82 57 82 67 74 
[251] 54 83 73 73 88 80 71 83 56 79 78 84 58 83 43 60 75 81 46 90 46 74 

其是在R.數據集忠實它具有272個觀察,因此它是由4給每個類別68個觀測整除。

我用

newwait<-cut(waiting, breaks =quantile(waiting,probs=seq(0,1,0.25)),include.lowest=TRUE,right=FALSE) 

table(newwait) 
newwait 
[43,58) [58,76) [76,82) [82,96] 
    66  68  67  71 

,你可以看到,觀察各組的數量是相似但不完全相同。

+0

我想你的代碼與100/1000/10000/100000隨機數,我總是得到4組大小相同的。你可以發佈你的數據嗎(可能是其中的一部分) – Michele

+0

可重現的例子:'x < - rep(1:5,c(1,3,3,2,1))'。 'table(cut(...))'給出(1,3,3,3)[雖然這個特殊的例子是不可能的,因爲'length(x)'不能被4整除 –

+0

我已經用變量編輯了我的問題 – user2974841

回答

0

基本上,這聽起來像你需要處理關係。你還需要一個向量,其長度除以4得到一個整數......但我會假設你知道這一點。

這是一個使用的rank平局決勝功能的解決方案:

set.seed(1) 
x <- round(runif(1000,0,1),1) 
table(x) 
## x 
## 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 
## 43 106 95 103 112 109 82 102 95 100 53 

y <- rank(x, ties.method='first') # <- this forces tie breaks 
cuts <- cut(y, breaks = quantile(y,probs=seq(0,1,0.25)), 
       include.lowest=TRUE, 
       right=FALSE) 
# check that cuts are all the same length: 
lapply(split(x,cuts), length) 
$`[1,251)` 
[1] 250 

$`[251,500)` 
[1] 250 

$`[500,750)` 
[1] 250 

$`[750,1e+03]` 
[1] 250 
+0

謝謝,它完美的作品。 – user2974841

相關問題