Учитывая упорядоченный вектор vec <- c(1, 4, 6, 3, 2, 7)
, я хочу вычислить для каждого элемента i
из vec
взвешенного среднего из предыдущих элементов, где вес является обратным по отношению к расстоянию от элемента i
.Р: Вычислительные на предыдущих элементах упорядоченного вектора
Функция должна действовать следующим образом.
- Для первого элемента
1
, не должен возвращатьNA
(нет предыдущего элемента). - Для второго элемента
4
следует вернуть1
. - Для третьего элемента
6
следует вернутьweighted.mean(x = c(1,4), w = c(1,2))
. - Для четвертого элемента
3
, должен возвращатьweighted.mean(x = c(1,4,6), w = c(1,2,3))
Полученный вектор result
должен быть, с length(result) == length(vec)
, c(NA, 1, 3, 4.5, 3.9, 3.266667)
.
UPDATE: Я ясно имею в виду без использования цикла
result <- numeric()
for (i in 1:length(vec)) {
if (i == 1) {
result <-
c(result, NA)
} else {
previous_elements <- vec[1:(i-1)]
result <-
c(result,
weighted.mean(x = previous_elements, w = 1:length(previous_elements)))
}
}
Просьба показать ваше усилие и где он идет не так. –
Возможный дубликат: http://stackoverflow.com/q/743812/903061 - в то время как это не относится к * взвешенному * скользящему средству, многие из методов (например, 'RcppRoll') предоставляют эту функциональность. – Gregor
[Вот еще один] (http://stackoverflow.com/q/8720055/903061), хотя он кажется немного устаревшим. – Gregor