不明白rollapply是干什么的
Do not understand what rollapply is doing
z <- zoo::zoo(1:5, as.Date(0:4))
z
1970-01-01 1970-01-02 1970-01-03 1970-01-04 1970-01-05
1 2 3 4 5
然后尝试:
rollapply(z, 1:2, sum, align = "left")
1970-01-01 1970-01-02 1970-01-03 1970-01-04 1970-01-05
1 5 3 9 5
我没有看到 z 和 rollapply() 函数调用之间的联系。我的假设是我会有一个向量,两个长 (1:2),它将覆盖 z 内的每个观察值并通过我的函数总和聚合。
z中的第一个数字是1,我的电话中的第一个也是1。有道理,1和没有的总和就是1。
z 中的第二个实例是 2,rollapply 中的第二个结果是 5。我可以看到 z 中第二个和第三个条目的总和是 5,但如果是这样,那么第三个就不会了rollapply 的结果是 3 + 4 = 7 而不是 3。我的 rollapply 如何为第三种情况调用 return 3?
r 到底在做什么?
window在宽度1和宽度2之间交替。结果是1,然后是2+3,然后是3,然后是4+5,然后是5。
这是 rollapply
输出,window 宽度为 1(第 1 列),window 宽度为 2(第 2 列)。你可以看到它只是在这两者之间交替。
sapply(1:2, function(w) rollapply(z, w, sum, align = 'left', fill = NA))
# [,1] [,2]
# [1,] 1 3
# [2,] 2 5
# [3,] 3 7
# [4,] 4 9
# [5,] 5 NA
如果两者都想要,又想保留属性,可以使用lapply
lapply(1:2, function(w) rollapply(z, w, sum, align = 'left', fill = NA))
# [[1]]
# 1970-01-01 1970-01-02 1970-01-03 1970-01-04 1970-01-05
# 1 2 3 4 5
#
# [[2]]
# 1970-01-01 1970-01-02 1970-01-03 1970-01-04 1970-01-05
# 3 5 7 9 NA
如果您提供一个更大的向量作为 rollapply
的第二个参数,同样的事情也会发生
rollapply(1:10, 2:4, sum)
# [1] 3 6 14 9 15 26 15 24
sapply(2:4, function(w) rollapply(1:10, w, sum, fill = NA))
# [,1] [,2] [,3]
# [1,] 3 NA NA
# [2,] 5 6 10
# [3,] 7 9 14
# [4,] 9 12 18
# [5,] 11 15 22
# [6,] 13 18 26
# [7,] 15 21 30
# [8,] 17 24 34
# [9,] 19 27 NA
# [10,] NA NA NA
z <- zoo::zoo(1:5, as.Date(0:4))
z
1970-01-01 1970-01-02 1970-01-03 1970-01-04 1970-01-05
1 2 3 4 5
然后尝试:
rollapply(z, 1:2, sum, align = "left")
1970-01-01 1970-01-02 1970-01-03 1970-01-04 1970-01-05
1 5 3 9 5
我没有看到 z 和 rollapply() 函数调用之间的联系。我的假设是我会有一个向量,两个长 (1:2),它将覆盖 z 内的每个观察值并通过我的函数总和聚合。
z中的第一个数字是1,我的电话中的第一个也是1。有道理,1和没有的总和就是1。
z 中的第二个实例是 2,rollapply 中的第二个结果是 5。我可以看到 z 中第二个和第三个条目的总和是 5,但如果是这样,那么第三个就不会了rollapply 的结果是 3 + 4 = 7 而不是 3。我的 rollapply 如何为第三种情况调用 return 3?
r 到底在做什么?
window在宽度1和宽度2之间交替。结果是1,然后是2+3,然后是3,然后是4+5,然后是5。
这是 rollapply
输出,window 宽度为 1(第 1 列),window 宽度为 2(第 2 列)。你可以看到它只是在这两者之间交替。
sapply(1:2, function(w) rollapply(z, w, sum, align = 'left', fill = NA))
# [,1] [,2]
# [1,] 1 3
# [2,] 2 5
# [3,] 3 7
# [4,] 4 9
# [5,] 5 NA
如果两者都想要,又想保留属性,可以使用lapply
lapply(1:2, function(w) rollapply(z, w, sum, align = 'left', fill = NA))
# [[1]]
# 1970-01-01 1970-01-02 1970-01-03 1970-01-04 1970-01-05
# 1 2 3 4 5
#
# [[2]]
# 1970-01-01 1970-01-02 1970-01-03 1970-01-04 1970-01-05
# 3 5 7 9 NA
如果您提供一个更大的向量作为 rollapply
rollapply(1:10, 2:4, sum)
# [1] 3 6 14 9 15 26 15 24
sapply(2:4, function(w) rollapply(1:10, w, sum, fill = NA))
# [,1] [,2] [,3]
# [1,] 3 NA NA
# [2,] 5 6 10
# [3,] 7 9 14
# [4,] 9 12 18
# [5,] 11 15 22
# [6,] 13 18 26
# [7,] 15 21 30
# [8,] 17 24 34
# [9,] 19 27 NA
# [10,] NA NA NA