Я хочу получить среднее значение некоторых значений по столбцу следующим образом:
Вычисляя среднее значение тех значений, где нет 0, затем при нахождении 0 сбрасывают и получают среднее значение следующих значений, пока снова не найдут 0, и так далее.
Мои данные выглядят так:
len value
0 0.0000
0 0.0000
1 307.4463
2 308.0341
0 0.0000
0 0.0000
0 0.0000
1 305.7210
0 0.0000
Вот образец:
dput(sdat)
structure(list(len = c(0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0), value = c(0,
0, 0, 0, 307.446310279931, 308.034096297716, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 305.720985439491, 0, 0, 0, 0, 0, 0, 308.599408144233,
308.511240241565, 305.843728990264, 0, 0, 0, 0, 0)), .Names = c("len",
"value"), row.names = 250:280, class = "data.frame")
Итак, я хочу получить еще один столбец со средним значением над значением. Например. среднее значение (307,4463,308.0341), затем 305,72 .. и т. д.
Моя первая попытка использовать ave:
sdat$mv <- ave( sdat[,"value"], (sdat[,"value"])==0,
FUN=function(x) mean(x,na.rm=T))
Итак, я бы хотел получить вывод:
len value mv
0 0.0000 0
0 0.0000 0
1 307.4463 0
2 308.0341 307.7402 # mean of the previous 2-values
0 0.0000 0
0 0.0000 0
0 0.0000 0
1 305.7210 3015.7210
...................
Но это не работает должным образом .. Я получаю неправильные значения ... и, если возможно, я бы получил в результирующем столбце только одно значение со средним значением (в конечной позиции перед следующими 0), а остальные с 0 или NA должно быть в порядке.
Есть идеи / предложения?
Большое спасибо,