如何创建一个新列,其中值来自数字减去一列?

时间:2020-04-04 17:19:02

标签: r dataframe

我的目标是创建一个新列“ 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

谢谢!

1 个答案:

答案 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")