引用数据帧中的前一行并与另一列混合

时间:2018-01-24 08:29:13

标签: r cumsum

我想计算一行中的值作为前一行的值和另一列的值的总和:

timestamp = c(1:10) 
c1 = c(0, 1, 0, 0, -1, 0 ,1 ,0, -1, 0)
c2 = c(rep(0,10)) 

df = data.frame(timestamp, c1, c2)      

#df$c2 is then set to the desired result
df$c2 <- c(0, 1, 1, 1, 0, 0, 1, 1, 0, 0) 

> df
   timestamp c1 c2
1          1  0  0
2          2  1  1
3          3  0  1
4          4  0  1
5          5 -1  0
6          6  0  0
7          7  1  1
8          8  0  1
9          9 -1  0
10        10  0  0

当然,我不想使用for循环。我发现了很多使用apply的例子,但在引用另一列时(参见示例中的c1)找不到解决方案

2 个答案:

答案 0 :(得分:0)

在c3中你可以找到c1 + c1(pos-1)+ c2,这是你想要的吗?

c0<-c(0,as.numeric(df[c(1:nrow(df)-1),"c1"]))
c3<-c0+df$c1+df$c2

cbind(df,c3)
   timestamp c1 c2 c3
1          1  0  0  0
2          2  1  1  2
3          3  0  1  2
4          4  0  1  1
5          5 -1  0 -1
6          6  0  0 -1
7          7  1  1  2
8          8  0  1  2
9          9 -1  0 -1
10        10  0  0 -1

答案 1 :(得分:0)

或者使用dplyr:

library(dplyr)
df %>% mutate( c2 = cumsum(c1))