2016-10-31 4 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 в группы, которые Bucket [0,100), [100, 200)...etc однако, моя цель состоит в том, что bucketing является переменной величиной, на основе только предшествующее данные, а не весь вектор. По существу, каждая точка будет находиться в «верхнем дециле», потому что эта серия линейна, однако для стохастической серии дециль последней точки определяется только относительно точек продолжения, а не всей серии.

Я попытался следующие:

`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

Как написано, это не имеет никакого смысла для меня. Quantiles для непрерывных значений, factora - для дискретных значений. Я предлагаю вам попробовать создать пример с небольшим набором данных любой переменной, которую можно представить, а затем продемонстрировать, что вы ожидаете от нее, используя термины. –

+0

Цель состоит в том, чтобы «decile», назначенный 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