2017-01-24 2 views
0


Распространяющихся Расчет вдоль рядов

, используя следующие данные, как можно распространять расчет для того, чтобы заполнить два NA's.

df <- structure(
    list(
    x = c(0L, 30L, 40L), 
    ed0 = c(0.24329772574554, 
      NA, NA), 
    kd = c(
     -0.0352736803781794, 
     -0.0431451671867429, 
     -0.0405766219035099 
    ) 
), 
    .Names = c("x", "ed0", "kd"), 
    row.names = c(NA, -3L), 
    class = c("tbl_df", 
      "tbl", "data.frame") 
) 

df 
#> x  ed0   kd 
#> 1 0 0.2432977 -0.03527368 
#> 2 30  NA -0.04314517 
#> 3 40  NA -0.04057662 

Таким образом, значение первой NA будет 30 + DF $ ed0 [1] + DF $ кД [1], а значение второй Н.А. NA бы 40 + DF $ ed0 [2] (в расчете на предыдущий шаг) + df $ kd [2]. Спасибо.

+1

Я только что изменил код, чтобы скорректировать термин x, поскольку я считаю, что он не должен отставать, как это было раньше. – lmo

ответ

1

Вот довольно простой метод в базе R.

with(df, cumsum(x + ifelse(is.na(ed0), 0, ed0) + c(0, head(kd, -1)))) 
[1] 0.2432977 30.2080240 70.1648789 

Чтобы разорвать этот вниз, х остается, как это и c(0, head(kd, -1)) расстановок лагового вектора кД, где начальное значение равно 0. ifelse(is.na(ed0), 0, ed0) проверяет каждые элемент ed0 является NA и заменяет его на 0, если TRUE. Эти три члена суммируются вместе, и полученный вектор задается cumsum для получения суммарной суммы. Наконец, with используется для уменьшения набора.

+0

Спасибо, работа как ожидалось. –

Смежные вопросы