我想用这个公式计算第二行 n_j 列中的 NA n_j - (d_j+c_j).
创建数据
df = structure(list(time_intervals = structure(1:8, levels = c("[0,12)",
"[12,24)", "[24,36)", "[36,48)", "[48,60)", "[60,72)", "[72,84)",
"[84,96]"), class = "factor"), d_j = c(16L, 10L, 1L, 3L, 2L,
2L, 0L, 2L), c_j = c(4L, 4L, 0L, 1L, 2L, 0L, 1L, 0L), n_j = c(48L,
NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, -8L), class = c("tbl_df",
"tbl", "data.frame"))
我设法用 for 循环来做到这一点
for (i in 1:nrow(df)) {
df <- df |>
mutate(
n_j =
ifelse(is.na(n_j), lag(n_j)- (lag(d_j)+lag(c_j)), n_j)
)
}
有没有办法使用 purrr::map 或其他 tidyverse 函数来做到这一点?
为什么不使用滞后函数? 变异(N_j = ifelse(is.na(n_j),lag(n_j,1)-(d_j+c_j),n_j))
如果我理解正确(因为使用我的手机,我不确定),这会给你你想要的,即前一行的 NJ(否则全部都是 na)减去特定行的 DJ 和 CJ 之和
transform(df, n_j = c(48, 48 - cumsum(d_j + c_j)[-nrow(df)]))
time_intervals d_j c_j n_j
1 [0,12) 16 4 48
2 [12,24) 10 4 28
3 [24,36) 1 0 14
4 [36,48) 3 1 13
5 [48,60) 2 2 9
6 [60,72) 2 0 5
7 [72,84) 0 1 3
8 [84,96] 2 0 2