2016-10-31 16 views
0

我可以創建我的數據使用下面的代碼的十分位數的一個因素變量,它考慮到了整個歷史:R:創建基於通用滾動十分位數的一個因素變量數據集的增長

`q <- quantile(x, seq(0,1,0.1), na.rm = TRUE) 
decilab <- c("1st","2nd","3rd","4th","5th","6th","7th","8th","9th","10th") 
q.factor <- cut(x, unique(q), included.lowest = TRUE, labels = decilab)` 

然而,我需要在滾動基礎上進行通用的十進制分割,只考慮標記之前的歷史記錄。下面的代碼使用for循環來計算滾動quantile作爲9個不同的變量,但我不確定如何將其轉換爲單一因子變量(我也不特別需要/需要這些變量存在)。

`for(i in 1:length(x)){ 
    D1[i] <- quantile(x[1:i],0.1, na.rm = TRUE) 
    D2[i] <- quantile(x[1:i],0.2, na.rm = TRUE) 
    D3[i] <- quantile(x[1:i],0.3, na.rm = TRUE) 
    D4[i] <- quantile(x[1:i],0.4, na.rm = TRUE) 
    D5[i] <- quantile(x[1:i],0.5, na.rm = TRUE) 
    D6[i] <- quantile(x[1:i],0.6, na.rm = TRUE) 
    D7[i] <- quantile(x[1:i],0.7, na.rm = TRUE) 
    D8[i] <- quantile(x[1:i],0.8, na.rm = TRUE) 
    D9[i] <- quantile(x[1:i],0.9, na.rm = TRUE) 
}` 

必須有更好的方法!感謝您的幫助,如果這是一個常見問題,我很抱歉 - 迄今爲止我還沒有發現任何東西。

編輯:道歉,因爲我是新的堆棧溢出和R.我想我有一個更好的例子,但我不知道如何重新提交此問題。

假設你有矢量x <- 1:1000的目標是削減該數據到十分位數與cut(x, seq(0,1,0.1), include.lowest = TRUE)然而,這將全系列x切成然而該桶[0,100), [100, 200)...etc組,我的目標是,桶裝是可變的,僅基於前面數據,而不是整個矢量。所以基本上,每個單點都將處於「最高十分位數」,因爲這個系列是線性的,但是對於隨機系列,最新點的十分位數僅相對於進行點確定,而不是整個系列。

我試過如下:

`for (i in 1:length(x)){ 
    z[i] <- as.numeric(cut(x[1:i], quantile(x[1:i], seq(0,1,.1))))[i] 
} ` 

但是不起作用

+0

當問問題上堆棧溢出有關代碼請提供最小,完全,可覈查實施例包括數據。在'r'標籤描述中,它特別要求你使用'dput()'共享必要的數據。 http://stackoverflow.com/help/mcve –

+0

正如所寫,這對我沒有任何意義。分位數用於連續值,事實上用於離散值。我建議你嘗試創建一個包含任何想象的變量的小數據集的示例,然後使用三分位數展示您期望的變量。 –

+0

目標是讓分配給x [n]的「十分位數」基於x [1:n]中的數據範圍,並排除x [(n + 1):inf範圍內的數據] – rroche

回答

0
`library(dplyr) 
x <- 1:1000 
y<-vector(mode="numeric",length=0) 
for (i in 1:length(x)){ 
    y[i]<-last(ntile(x[1:i],10)) 
}` 

這似乎是工作!從同事

意見是,dplyr::ntile優於cut

相關問題