使用以下数据,如何传播
计算以填充两个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]。谢谢。
答案 0 :(得分: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)
检查ed0的每个元素是否为NA并将其替换为0如果是真的。将这三个项相加在一起,并将得到的矢量赋予cumsum
以产生累积和。最后,with
用于减少输入。