Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.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
将行值添加到R中的上一行值_R - Fatal编程技术网

将行值添加到R中的上一行值

将行值添加到R中的上一行值,r,R,我有一个非常基本的问题,因为我对R比较陌生。我想知道如何在前一个值的基础上添加一个列中的值,然后在1000个值的列中向下重复?注意,我不想要累计和,因此cumsum函数没有任何用处。假设我的列名为WD,我想将WD1添加到WD2,WD2添加到WD3,WD3添加到WD4等。一直向下,并将这些总和作为新列输出。有简单的方法吗?非常感谢 一个可重复的例子: set.seed(111) df1 <- data.frame(WD=sample(10)) #result df1 WD new 1

我有一个非常基本的问题,因为我对R比较陌生。我想知道如何在前一个值的基础上添加一个列中的值,然后在1000个值的列中向下重复?注意,我不想要累计和,因此cumsum函数没有任何用处。假设我的列名为WD,我想将WD1添加到WD2,WD2添加到WD3,WD3添加到WD4等。一直向下,并将这些总和作为新列输出。有简单的方法吗?非常感谢

一个可重复的例子:

set.seed(111)
df1 <- data.frame(WD=sample(10))

#result
df1
   WD new
1   6   6
2   7  13
3   3  10
4   4   7
5   8  12
6  10  18
7   1  11
8   2   3
9   9  11
10  5  14
set.seed(111)
df1我们将当前行(
WD[-nrow(df1)]
)与下一行(
WD[-1L]
)相加,并与第一个元素连接以创建列

df1$newColumn <- with(df1, c(WD[1],WD[-1]+WD[-nrow(df1)]))

df1$newColumn另一个选项,使用
dplyr中的
lag()

library(dplyr)
mutate(df1, new = WD + lag(WD, default = 0))
或者使用
数据中的
shift()
。表

library(data.table)
setDT(df1)[, new := WD + shift(WD, fill = 0)]
注意:shift()的默认类型为“滞后”。另一个可能的值是“lead”

其中:

#   WD new
#1   6   6
#2   7  13
#3   3  10
#4   4   7
#5   8  12
#6  10  18
#7   1  11
#8   2   3
#9   9  11
#10  5  14

非常感谢您akrun-一个非常简单的解决方案,效果非常好。我真的很感谢你的帮助@DJ-AFC没问题。很高兴知道这对你有帮助。