求和并将其放在R

时间:2018-04-25 09:15:31

标签: r sum

我有一个包含950个数字的列。我想对第1:40行进行求和并将其放在第50行的新列中,然后将第2行和第2行相加并将其放在新列中的第51行,依此类推。我该怎么办?

2 个答案:

答案 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