列sum_last_3
包含使用函数zoo::rollsum
的列x
的最后3个值的总和.
有没有办法只使用变量sum_last_3
来重新创建变量x
?
library(dplyr)
library(zoo)
df <- data.frame(x = c(2,3,5,6,8,1,0,2,3,5,1,9,5,3))
df$sum_last_3 <- rollsum(df$x, k = 3, fill = NA, align = "right")
列sum_last_3
包含使用函数zoo::rollsum
的列x
的最后3个值的总和.
有没有办法只使用变量sum_last_3
来重新创建变量x
?
library(dplyr)
library(zoo)
df <- data.frame(x = c(2,3,5,6,8,1,0,2,3,5,1,9,5,3))
df$sum_last_3 <- rollsum(df$x, k = 3, fill = NA, align = "right")
该操作是不可逆的;但是,如果不是用NA填充结果的前两个元素,而是使用partial=TRUE
来获得部分和,那么它就是可逆的.下面的rollapplyr
行与问题中的rollsum
行相同,只是我们对前两个元素使用了部分求和.M是通过对单位矩阵运行运算而获得的运算的矩阵表示.最后,我们反转M并将其乘以df$SUM_LAST_3以恢复原始输入.
library(zoo)
df <- data.frame(x = c(2,3,5,6,8,1,0,2,3,5,1,9,5,3))
df$sum_last_3 <- rollapplyr(df$x, 3, sum, partial = TRUE)
M <- rollapplyr(diag(nrow(df)), 3, sum, partial = TRUE)
solve(M, df$sum_last_3)
## [1] 2 3 5 6 8 1 0 2 3 5 1 9 5 3