2016-12-28 25 views
0

Я хочу рассчитать скользящие средние, чтобы заполнить записи NA известными позициями 3, 5 и 1. Как я могу это сделать с зоопарком пакета в R?R и Zoo: скользящая средняя с оборванными данными?

Входной

> library(zoo) 
> hh <- c(NA, NA, NA, 3, NA, 5, NA, 1, NA, NA, NA, NA) 

Сбой

неудачно с rollmean

> rollmean(hh,na.omit=TRUE,k=1) 
    [1] NA NA NA NA NA NA NA NA NA NA NA NA 
    > rollmean(hh,4, na.omit=TRUE,k=1) 
    [1] NA NA NA NA NA NA NA NA NA NA NA NA 
    > rollmean(hh,4, na.rm=TRUE,k=1) 
    [1] NA NA NA NA NA NA NA NA NA NA NA NA 

неудачно с Rollapply

> rollapply(hh, 4, function(x) mean(x)) 
    [1] NA NA NA NA NA NA NA NA NA 

Предназначенный выход что-то вроде

> COMMAND(hh, movingAverageNumber, function(x) mean(x)) 
    [1] 3 3.3 3.4 3 4 5 3 1 2 1.5 1.2 1 0.8 

Связанные

  1. Using rollmean when there are missing values (NA)

ответ

1

В зависимости от того, что вы ищете, как насчет:

rollapply(hh, 5, mean, na.rm = TRUE) 
    [1] 3 4 4 3 3 3 1 1 

или

rollapply(hh, 4, mean, na.rm = TRUE) 
    [1] 3 3 4 4 3 3 1 1 NaN 
+0

+1 для получения команд, работающих :) Как бы вы заполнить концы чч? hh имеет 12 элементов, в то время как первый кандидат здесь имеет 8 элементов, в то время как последний кандидат здесь имеет 9 элементов (с одним NaN. Существует ли какая-либо опция для заполнения значений NaN с некоторым значением по умолчанию, например 1? –

+0

@Rhodo обе функции генерируют ошибку. на выходе показан аргумент, который должен быть установлен, должен быть 'width', а не' by' – manotheshark

+0

@ReganAlpha Я бы предложил ввести '? rollapply' и искать аргумент, называемый' fill' – manotheshark

0

Предполагая, что вы хотите, прокатные mean для четырех значений (вы передаете k=1 к rollmean), вам нужно сказать mean уронить NA

library(zoo) 
rollapply(hh, 4, function(x) mean(x, na.rm=TRUE)) 

[1] 3 3 4 4 3 3 1 1 NaN 

Хотя это возвращает нечто иное, чем ваш желаемый результат. Вам нужно будет объяснить это дальше, если вы хотите что-то другое.