2017-08-16 4 views
0

Je rencontre un problème avec le temps que mon code prend pour s'exécuter. J'ai une trame de données d'environ 23000 colonnes et 600 lignes qui folllows le principe suivant:Comment utiliser les formats de date pour écrire des conditions dans les trames de données

date <- c(30032015,30042015,31052015,30062015,31072015,31082015,30092015) 
AAPL <- c(10,NA,NA,10,NA,NA,20) 
MSFT <- c(10,NA,NA,30,NA,NA,25) 
sales <- data.frame (date,AAPL,MSFT) 
sales$date <- strptime (sales$date, format="%d%m%Y") 

Et je veux que les valeurs d'avril et mai être égales aux valeurs de mars et même par rapport à juillet et août par rapport à juin.

Ce que je fais est ce

sales [is.na(sales)] <- 0 

for (i in 1:6){ 
for (j in 2:3){ 
sales[i,j] <- ifelse(sales[i,j]>0,sales[i,j],ifelse(sales[i-1,j]>0,sales[i- 
1,j],ifelse(sales[i-2,j]>0,sales[i-2,j],NA))) 
}} 

Cependant, pour une grande trame de données prend beaucoup d'heures. N'est-il pas possible de dire en quelque sorte que les valeurs des mois 4 et 5 sont égales aux valeurs du mois 3 et ainsi de suite?

Nous vous remercions à l'avance

Répondre

2

Vous voulez sans doute la fonction na.locf() du package zoo. Il porte la dernière observation en avant pour remplacer les valeurs na.

require(zoo) 
sales[,2:3] <- apply(sales[,2:3],2,na.locf)