r - 数据框中最后 4 行的 sumproduct 是否有 R 函数?
问题描述
我需要一个像 sumproduct (excel) 这样的函数,但只适用于最后 4 行。
我正在使用 dplyr,我尝试使用 rollapply 进行 sumproduct,但我只能对一列的最后 4 行求和,而我需要将每行乘以 2 列,然后将其与最后 4 行求和,例如 excel 中的 sumproduct。
x1 <- c(84,105,79,140,108,79,112,118,114,92)
x2 <- c(138,110,84,45,128,99,100,124,121,115)
df <- data.frame(x1,x2)
我期待这样的结果:
x3 <- c(NA,NA,NA,36078,38310,34581,39145,47477,47447,50206)
解决方案
将列相乘,然后计算滚动和:
library(zoo)
with(df, rollsumr(x1 * x2, 4, fill = NA))
## [1] NA NA NA 36078 38310 34581 39145 47477 47447 50206
这也可以使用 dplyr 管道表示:
library(dplyr)
library(zoo)
df %>%
{ x1 * x2 } %>%
rollsumr(4, fill = NA)
或创建一个 3 列数据框,其中滚动总和作为第三列:
df %>%
mutate(roll = rollsumr(x1 * x2, 4, fill = NA))