我有一个包含950个数字的列。我想对第1:40行进行求和并将其放在第50行的新列中,然后将第2行和第2行相加并将其放在新列中的第51行,依此类推。我该怎么办?
答案 0 :(得分:0)
您可以使用RcppRoll::roll_sum()
希望这会有所帮助:
r <- 50
df1 <- data.frame(c1 = 1:951)
v1 <- RcppRoll::roll_sum(df1$c1, n=40)
df1$c2 <- c(rep(NA, r), v1[1:(nrow(df1)-r)])
View(df1) # in RStudio
你决定从第911行开始的总和发生了什么(我忽略了它们)
答案 1 :(得分:0)
您可以使用RcppRoll::roll_sum()
和dplyr::lag()
...
df <- data.frame(v = 1:950)
library(dplyr)
library(RcppRoll)
range <- 40 # how many values to sum, i.e. window size
offset <- 10 # e.g sum(1:40) goes to row 50
df <- mutate(df, roll_sum = RcppRoll::roll_sum(lag(v, n = offset),
n = range, fill = NA, align = "right"))
df[(range+offset):(range+offset+5), ]
# v roll_sum
# 50 50 820
# 51 51 860
# 52 52 900
# 53 53 940
# 54 54 980
# 55 55 1020
sum(1:range); sum(2:(range+1))
# [1] 820
# [1] 860