【问题标题】:Propagating calculation along rows沿行传播计算
【发布时间】:2017-01-24 21:07:27
【问题描述】:


使用以下数据,如何传播 计算以填充两个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]。谢谢。

【问题讨论】:

  • 我只是更改了代码以调整 x 项,因为我认为它不应该像以前那样滞后。

标签: r dplyr na


【解决方案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,如果为 TRUE,则将其替换为 0。这三个项相加在一起,并将结果向量提供给cumsum 以产生累积和。最后,with 用于减少打字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-13
    • 2017-10-24
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    相关资源
    最近更新 更多