2017-08-21 6 views
1

Comment calculer la moyenne mobile à partir de la 4ème colonne de "datamean" (depuis la largeur = 4) et avoir la première et la dernière trois colonnes comme "NA" ou vide?Comment calculer la moyenne mobile à partir de la 4ème colonne de "datamean" (donné la largeur = 4) et avoir les trois premières colonnes comme "NA"?

require(zoo)  
data <- zoo(seq(1:10)) 
datamean <- rollapply(data, width=4, by=1, FUN=mean, align="left") 
cbind(data, datamean) 

Actuellement, la sortie est la suivante:

data datamean 
1  1  2.5 
2  2  3.5 
3  3  4.5 
4  4  5.5 
5  5  6.5 
6  6  7.5 
7  7  8.5 
8  8  NA 
9  9  NA 
10 10  NA 

Cependant je veux:

data datamean 
1  1  NA 
2  2  NA 
3  3  NA 
4  4  2.5 
5  5  3.5 
6  6  4.5 
7  7  5.5 
8  8  NA 
9  9  NA 
10 10  NA 

Répondre

1

Nous pouvons calculer le roulement d'abord voulons dire, puis manipuler la colonne datamean plus tard. mutate et ifelse peuvent examiner un certain numéro de ligne (dans ce cas, les trois derniers) et remplacer ces numéros par NA. dt2 est la sortie finale.

library(dplyr) 
require(zoo) 

dt <- data_frame(data = zoo(seq(1:10))) 

dt2 <- dt %>% 
    mutate(datamean = rollmean(data, k = 4, fill = NA, align = "right")) %>% 
    mutate(datamean = ifelse(row_number() %in% n():(n() - 2), NA, datamean)) 

dt2 
# A tibble: 10 x 2 
     data datamean 
    <S3: zoo> <dbl> 
1   1  NA 
2   2  NA 
3   3  NA 
4   4  2.5 
5   5  3.5 
6   6  4.5 
7   7  5.5 
8   8  NA 
9   9  NA 
10  10  NA