2017-01-24 53 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

谢谢,按预期工作。 –