我有一个非常基本的问题,因为我对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
答案 0 :(得分:3)
我们将当前行(WD[-nrow(df1)]
)添加到下一行(WD[-1L]
)并与第一个元素连接以创建列。
df1$newColumn <- with(df1, c(WD[1],WD[-1]+WD[-nrow(df1)]))
答案 1 :(得分:2)
另一种选择,使用lag()
中的dplyr
:
library(dplyr)
mutate(df1, new = WD + lag(WD, default = 0))
或使用shift()
中的data.table
:
library(data.table)
setDT(df1)[, new := WD + shift(WD, fill = 0)]
注意:默认类型shift()
为&#34;滞后&#34;。另一个可能的值是&#34;引导&#34;。
给出了:
# 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