我想计算一行中的值作为前一行的值和另一列的值的总和:
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)找不到解决方案
答案 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))