2013-12-14 87 views
0

這裏的問題是:我有一個數據集,讓我們說:如何在R中裁剪數據?

a <- c(0,0,0,0,1,1,1,1,1,1) 

我想將它切成片,甚至(例如5個)。問題是我不能使用分位數或切斷,因爲有些值重複,所以你不能設置不同的斷點。

> quantile(a) 
    0% 25% 50% 75% 100% 
    0 0 1 1 1 

(僅使用兩個級別)(重複斷點)

> cut(a, 5) 
[1] (-0.001,0.199] (-0.001,0.199] (-0.001,0.199] (-0.001,0.199] (0.801,1]  
[6] (0.801,1]  (0.801,1]  (0.801,1]  (0.801,1]  (0.801,1]  
Levels: (-0.001,0.199] (0.199,0.4] (0.4,0.6] (0.6,0.801] (0.801,1] 

我知道可以產生這樣的載體:

b <- c(1,1,2,2,3,3,4,4,5,5) 

,並使用它用於採樣。或者我可以使用循環和計數實例。但是這需要循環和一些笨拙的編碼。我正在尋找一種比這更好的簡單高效(R型)功能。

(我可以寫,但我不想推倒重來。)

回答

1

您可以使用cut,但你必須使用它的向量的數值指標,即seq(a),而不是矢量本身。

然後,你用split分割所述載體引入相等長度段:

split(a, cut(seq(a), 5, labels = FALSE)) 

這將返回的五個短矢量的列表。

的另一種方式,沒有cut,由

split(a, rep(seq(5), each = length(a)/5)) 
0

給出我認爲這取決於你下一步打算做什麼。我喜歡暗淡:

dim(a) <- c(2, length(a)/2) 

而且現在看起來這樣的:

 [,1] [,2] [,3] [,4] [,5] 
[1,] 0 0 1 1 1 
[2,] 0 0 1 1 1