2012-04-11 5 views
1

Я хочу создать новый столбец с текущим средним значением указанной ширины бункера, и для этого я использовал пакет зоопарка (функция rollmean). Моя таблица состоит из 1 миллиона строк, и эта функция применяется к первым 500 000, после чего все созданные НС, любые идеи, что я могу делать неправильно?ошибка с пакетом зоопарка, данные слишком долго?

library("zoo") 

HB<-bin/2 
n<-length(dataraw$S) 
data<-dataraw[HB:(n-HB),] 
sax<- rollmean (dataraw$S, bin) 
data2<-cbind(data,sax) 

Я бы aappreciate любой помощи, которую вы могли бы дать мне, я застрял с этим слишком долго. Заранее спасибо.

+2

'? Rollmean' говорит следующее:« Метод rollmean по умолчанию не обрабатывает входы, содержащие NA. В таких случаях вместо этого используйте rollapply ». –

ответ

1

У вас почти наверняка есть NA, который затем распространяется через rollmean(). Миллион ценность самого по себе не создает проблемы, как этот маленький эксперимент показывает:

R> library(zoo) 
R> X <- zoo(rnorm(1e6), order.by=Sys.time()+seq(1,1e6)*1e-3) 
R> Xrm <- rollmean(X, 63) 
R> summary(cbind(X, Xrm)) 
    Index        X    Xrm   
Min. :2012-04-11 13:57:28.9 Min. :-5.1857 Min. :-0.5843 
1st Qu.:2012-04-11 14:01:38.9 1st Qu.:-0.6741 1st Qu.:-0.0866 
Median :2012-04-11 14:05:48.9 Median :-0.0011 Median :-0.0013 
Mean :2012-04-11 14:05:48.9 Mean :-0.0011 Mean :-0.0011 
3rd Qu.:2012-04-11 14:09:58.9 3rd Qu.: 0.6727 3rd Qu.: 0.0838 
Max. :2012-04-11 14:14:08.9 Max. : 4.8914 Max. : 0.5874 
                NA's :62  
R> 

Единственного NAs здесь в связи с введением начального отставания в начале.

Но когда я ввожу один NA в X, весь ад потерять:

R> X[567890] <- NA 
R> summary(cbind(X, rollmean(X, 63))) 
    Index        X   rollmean(X, 63) 
Min. :2012-04-11 13:57:28.9 Min. :-5.18574 Min. :-1  
1st Qu.:2012-04-11 14:01:38.9 1st Qu.:-0.67413 1st Qu.: 0  
Median :2012-04-11 14:05:48.9 Median :-0.00110 Median : 0  
Mean :2012-04-11 14:05:48.9 Mean :-0.00109 Mean : 0  
3rd Qu.:2012-04-11 14:09:58.9 3rd Qu.: 0.67268 3rd Qu.: 0  
Max. :2012-04-11 14:14:08.9 Max. : 4.89137 Max. : 1  
           NA's :1   NA's :432173 
R> 

и я в конечном итоге с 432K задней САМ.

+0

Если это так, вы должны взглянуть на 'rollapply'. Например. 'rollapply (dataraw $ S, width = bin, FUN = mean, fill = NA)' может обрабатывать значения NA в середине вектора. – smu

+0

Вот и все! Бесконечно благодарен!!! –

+0

Отлично - если он решил ваш вопрос, вы должны подумать: а) «отложить» ответ (нажмите стрелку вверх) и b) «принять» ответ (щелкните по отметке галочки). –