Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用dplyr创建使用其自身滞后值的列_R_Dplyr - Fatal编程技术网

如何使用dplyr创建使用其自身滞后值的列

如何使用dplyr创建使用其自身滞后值的列,r,dplyr,R,Dplyr,假设我有以下数据帧 c1<- c(1:10) c2<- c(11:20) df<- data.frame(c1,c2) c1 c2 1 11 2 12 3 13 4 14 5 15 6 16 7 17 8 18 9 19 10 20 是否可以使用dplyr执行此操作?我尝试过几种方法,但都没有成功。如果您有任何建议,我们将不胜感激。这是cumsum累积总和的一个很好的用法 c3 = lag(cumsum(c2 - c1), defau

假设我有以下数据帧

c1<- c(1:10)
c2<- c(11:20)
df<- data.frame(c1,c2)

c1  c2
1   11
2   12
3   13
4   14
5   15
6   16
7   17
8   18
9   19
10  20

是否可以使用dplyr执行此操作?我尝试过几种方法,但都没有成功。如果您有任何建议,我们将不胜感激。

这是
cumsum
累积总和的一个很好的用法

c3 = lag(cumsum(c2 - c1), default = 0)

不要把
c3
看作是c3(-1)+c2-c1,把它看作是c3(n)=求和(从1到n-1)c2(i)-c1(i)

这是
cumsum
累积求和的一个很好的用法

c3 = lag(cumsum(c2 - c1), default = 0)

不要把
c3
想象成c3(-1)+c2-c1,把它想象成c3(n)=和(从1到n-1)c2(i)-c1(i)

这会创建列c3。假设第一个条目始终为0,因为没有前面的元素

df$c3 <- df$c2 - df$c1
df[1,"c3"] <- 0
df$c3 <- cumsum(df$c3)

这将创建列c3。假设第一个条目始终为0,因为没有前面的元素

df$c3 <- df$c2 - df$c1
df[1,"c3"] <- 0
df$c3 <- cumsum(df$c3)

使用
dplyr
df%>%变异(c3=lag(cumsum(c2-c1),默认值=0))
我没有想到使用cumsum()。感谢所有的答案。对于
dplyr
df%>%mutate(c3=lag(cumsum(c2-c1),default=0))
我没有想到要使用cumsum()。感谢所有的答案。这在这种特殊情况下有效,因为
c2
c1
之间的差异是恒定的-但解决问题的方法是,您需要删除最后一个元素,并在前面附加0,使其正常工作,不只是将第一个元素替换为0。这在这种特殊情况下有效,因为
c2
c1
之间的差异是恒定的-但是OP解决问题的方式是,您需要删除最后一个元素并将0附加到前面,这样它才能正常工作,而不仅仅是将第一个元素替换为0。