微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

rollapply 用于多维数组 (R)

如何解决rollapply 用于多维数组 (R)

不是 rollapply for two-dimensional arrays (R) 的副本,而是对其的详细说明 - 我实际想要做的比那个问题中描述的稍微复杂一些。我希望这个问题的任何答案都能轻松扩展到我的实际问题的解决方案,但不幸的是事实并非如此。

对于简单的向量,我们有

> a <- c(1:4)
> a
[1] 1 2 3 4
> rollapply(a,2,mean)
[1] 1.5 2.5 3.5

这是应该的。虽然 rollapply 本身仅限于一维向量,但几个非常有用的答案 such as this one by akrun 允许我以多种方式将其扩展到二维数组。

不幸的是,我现在又被卡住了,因为我没有看到任何答案如何推广到比两个 (*) 更高的维度。取一个数组 b

> b <- array(rep(c(1:4),each=6),c(2,3,4))
> b,1

     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    1    1    1,2

     [,]    2    2    2
[2,]    2    2    2,3

     [,]    3    3    3
[2,]    3    3    3,4

     [,]    4    4    4
[2,]    4    4    4

应该有一些方法可以在窗口大小为 2 的情况下采取手段来产生

,]  1.5  1.5  1.5
[2,]  1.5  1.5  1.5,]  2.5  2.5  2.5
[2,]  2.5  2.5  2.5,]  3.5  3.5  3.5
[2,]  3.5  3.5  3.5

但我不知道如何(显然在实际情况下,子数组不会只是在整个数组中重复相同的整数,而是包含实际数据)。

理想情况下,为了求平均值,我还希望能够为窗口中的各个子数组分配不同的权重,但我认为这只是定义要应用的自定义函数的问题。

(*) 也许有一个明显的方法,但我到的地方已经晚了,我找不到它。

解决方法

我无法让 zoo::rollapply 工作(作为外部调用,与其中一个评论中的内部使用不同),但是可以通过从外部控制输入向量来模仿其大部分行为({{1 }}) 和“窗口”(seq_len(dim(b)[3])[-1] 外部,[-1] 内部)。从那里开始,它只是一个数组的一个暗淡的平均值:

i-1:0
,

apply 的问题在于它可以进行维度的隐式转置,但 plyr 包中的 aaply 类似但没有隐式转置。

library(plyr)
library(zoo)

aaply(b,1:2,rollmean,2)

给予:

   X2
X1    1   2   3
  1 1.5 1.5 1.5
  2 1.5 1.5 1.5,= 2

   X2
X1    1   2   3
  1 2.5 2.5 2.5
  2 2.5 2.5 2.5,= 3

   X2
X1    1   2   3
  1 3.5 3.5 3.5
  2 3.5 3.5 3.5

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?