2017-01-24 54 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 $ KD [1]和的第二NA 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 

爲了打破這種向下,X保持原樣和c(0, head(kd, -1))設置KD的滯後矢量,其中的初始值是如果每個0 ifelse(is.na(ed0), 0, ed0)檢查如果TRUE,則ed0的元素爲NA並將其替換爲0。將這三個項相加在一起,得到的向量賦予cumsum以產生累計和。最後,with用於減少打字。

+0

謝謝,按預期工作。 –