2017-08-21 4 views
1

Wie berechnet man den laufenden Mittelwert ausgehend von der 4. Spalte von "datamean" (seit der Breite = 4) und haben die ersten und letzten drei Spalten als "NA" oder leer? dieseWie berechnet man den laufenden Mittelwert ausgehend von der 4. Spalte von "Datamean" (bei der Breite = 4) und haben die ersten drei Spalten als "NA"?

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

Derzeit ist die Ausgabe:

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 

aber ich will:

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 

Antwort

1

Wir können die Walz bedeuten berechnen zuerst, und dann manipulieren, um die datamean Spalte später. mutate und ifelse können eine bestimmte Zeilennummer (in diesem Fall die letzten drei) untersuchen und diese Nummern durch NA ersetzen. dt2 ist die endgültige Ausgabe.

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 
Verwandte Themen