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