我的目标是创建一个新列“ Yi1”,该列在第一行中为52,然后在第2行中跟随52减去第1行的“ di1”,然后在第2行中减去“ di1” “在第2行中将在第3行中,依此类推。
结果应如下所示:
time di1 Yi1
1 1 1 52
2 3 2 51
3 4 1 49
4 5 0 48
5 8 0 48
6 10 1 48
7 12 0 47
谢谢!
答案 0 :(得分:1)
我们可以做到
df1$Yi1 <- c(52, head(52 - cumsum(df1$di1), -1))
df1$Yi1
#[1] 52 51 49 48 48 48 47
或更短
with(df1, c(52, 52 - cumsum(di1[-length(di1)])))
#[1] 52 51 49 48 48 48 47
还是dplyr
library(dplyr)
df1 %>%
mutate(Yi1 = lag(52 - cumsum(di1), default = 52) )
# time di1 Yi1
#1 1 1 52
#2 3 2 51
#3 4 1 49
#4 5 0 48
#5 8 0 48
#6 10 1 48
#7 12 0 47
df1 <- structure(list(time = c(1L, 3L, 4L, 5L, 8L, 10L, 12L), di1 = c(1L,
2L, 1L, 0L, 0L, 1L, 0L)), row.names = c("1", "2", "3", "4", "5",
"6", "7"), class = "data.frame")