相关疑难解决方法(0)

R:使用 3D 数组(纬度、经度和时间)随时间计算函数的最佳方法是什么?

我经常使用大型 3D 数组(纬度、经度和时间),例如 720x1440x480 的大小。通常,我需要对每个纬度和经度随时间进行操作,例如,获取平均值(导致 2D 数组)或及时获取滚动平均值(导致 3D 数组),或更复杂的函数。

我的问题是:哪种包装(或方式)最有效和最快?

我知道一个选项是基础 R,使用 apply 函数和滚动函数与提供 rollapply 函数的包 zoo 混合。另一种方式是使用 tidyverse,另一种方式是使用 data.table。以及这些包之间的组合。但有没有最快的?

例如,如果我有这个数据立方体:

data <- array(rnorm(721*1440*480),dim = c(721,1440,480))
Run Code Online (Sandbox Code Playgroud)

哪些维度是纬度、经度和时间,如下所示:

lat <- seq(from = -90, to = 90, by = 0.25)
lon <- seq(from = 0, to = 359.75, by = 0.25)
time <- seq(from = as.Date('1980-01-01'), by = 'month', length.out = 480)
Run Code Online (Sandbox Code Playgroud)

我通常需要做这样的事情(这是在基础 R + 动物园):

# Average in time
average_data <- apply(data, 1:2, mean)

# Rolling mean, width of window = …
Run Code Online (Sandbox Code Playgroud)

arrays r data.table tidyverse

10
推荐指数
2
解决办法
261
查看次数

R中具有不同时间窗的移动平均值

我想在某个时间窗口计算移动平均值,而不是在时间序列的开头生成NA.例如,如果我将时间窗口设置为3,则2个第一个观察将具有NA.我想要的是第一次观察的时间窗口为1,第二次观察的时间窗口为2,然后是所有剩余观察的时间窗口.

我目前的代码:

#example data
x <- c(3,9,2,8,4,6,5,8)
#moving average with time window of length 3
(ma3 <- filter(x,rep(1/3,3),sides=1))
Run Code Online (Sandbox Code Playgroud)

r

7
推荐指数
1
解决办法
3921
查看次数

用锥形窗口计算运行平均值

给出(虚拟)向量

index=log(seq(10,20,by=0.5))
Run Code Online (Sandbox Code Playgroud)

我想计算具有居中窗口的运行平均值和每端的锥形窗口,即第一个条目保持不变,第二个是窗口大小的平均值3,依此类推,直到达到指定的窗口大小.

这里给出的答案:计算移动平均线,似乎都会产生一个较短的向量,切断窗口太大的起点和终点,例如:

ma <- function(x,n=5){filter(x,rep(1/n,n), sides=2)}

ma(index)

Time Series:
Start = 1 
End = 21 
Frequency = 1 
[1]       NA       NA 2.395822 2.440451 2.483165 2.524124 2.563466 2.601315
[9] 2.637779 2.672957 2.706937 2.739798 2.771611 2.802441 2.832347 2.861383
[17] 2.889599 2.917039 2.943746       NA       NA
Run Code Online (Sandbox Code Playgroud)

同样的

rollmean(index,5)
Run Code Online (Sandbox Code Playgroud)

来自动物园的包裹

有没有一种快速的方法来实现锥形窗口而不需要编写循环编码?

r running-total mean zoo

6
推荐指数
2
解决办法
397
查看次数

如何计算R中过去1个月的滚动平均值

我发现的大多数软件包和帖子均适用于固定大小的窗口或月/周汇总数据。可以计算滚动k个月的平均值吗?

例如,对于1个月的滚动窗口,假设数据为:

Date          Value
2012-05-28    101
2012-05-25     99
2012-05-24    102
....
2012-04-30     78
2012-04-27     82
2012-04-26     77
2012-04-25     75
2012-04-24     76
Run Code Online (Sandbox Code Playgroud)

前三个1个月滚动窗口应为:

1. 2012-05-28 to 2012-04-30
2. 2012-05-25 to 2012-04-26
3. 2012-05-24 to 2012-04-25
Run Code Online (Sandbox Code Playgroud)

请注意,这不是固定宽度的滚动窗口。该窗口实际上每天都会更改。

r window time-series

5
推荐指数
1
解决办法
3169
查看次数

在不平衡面板数据集中生成每个ID的所有先前观察的滚动平均值

我正在尝试计算不平衡数据集的滚动方式.为了说明我的观点,我制作了这个数据的玩具示例:

ID  year  Var   RollingAvg(Var)
1   2000  2     NA
1   2001  3     2
1   2002  4     2.5
1   2003  2     3
2   2001  2     NA
2   2002  5     2
2   2003  4     3.5
Run Code Online (Sandbox Code Playgroud)

该列RollingAvg(Var)是我想要的,但不能得到.在的话,我要寻找的所有以前观测的滚动平均值Var为每ID.我曾尝试使用rollapply,并ddplyzooplyr包,但我看不出如何设置滚动窗口长度用于每个ID的所有的以前的意见.也许我应该使用plm包呢?任何帮助表示赞赏.

我在BALANCED面板数据集上看到了关于滚动方式的其他帖子,但我似乎无法推断他们对不平衡数据的回答.

谢谢,

中号

r plyr zoo

5
推荐指数
1
解决办法
1611
查看次数

使用R中的移动平均线

我需要一些帮助来平滑R中的一些数据.所以基本上,我只有一个'时间'列和一个'速度'列.速度基本上代表某些蝌蚪的运动.只是我的数据有很多噪音,我认为使用"移动平均线"可能会帮助我平滑我的图形并显示某些模式.我如何在R中执行此操作?还是有更好的平滑技术我可以使用,这对我这样的新手R用户来说可能更容易理解?

多谢你们

我的数据基本上看起来像这样......但它持续了9000多个

Time    Velocity
1.36    2.4
1.81    1.2
2.19    2.4
2.51    2.1
2.98    1.8
3.51    3.0
4.88    2.1
5.38    2.0
6.52    2.4
6.71    1.2
7.29    2.4
7.67    2.1
8.27    1.8
9.13    3.0
9.95    2.1
10.69   2.0
11.29   2.54
12.82   1.64
13.32   2.70
13.89   2.19
14.33   2.44
14.93   2.93
15.75   2.77
17.63   3.21
18.18   2.4
18.82   1.2
20.02   2.4
20.86   2.1
21.44   1.8
22.24   3.0
23.07   2.1
23.67   2.0
Run Code Online (Sandbox Code Playgroud)

average r

2
推荐指数
1
解决办法
3559
查看次数

将函数应用于指定范围; 变化率

可能重复:
计算R中的移动平均值

我在R中编写了一个变化率函数,定义如下:

rateChange <- function(x) ((last(x)-first(x))/first(x))*100
Run Code Online (Sandbox Code Playgroud)

它适用于各种日期范围,例如5天,10天,200天等的变化率.但是,我现在需要在每天之间应用此功能.例如,为了确定5天的变化率,需要过去6次数据观察.

以下是Excel中的示例,为清楚起见,我正在尝试重现"更改率"列:

数据

谢谢!

r apply

1
推荐指数
1
解决办法
2997
查看次数

如何计算R中的7天移动平均线?

我正在使用package的rollmean功能zoo来计算一个简单的 7 天移动平均线。该函数有一个参数align,如果我输入“right”、“center”或“left”,它会更改值。它们之间有什么区别?

示例代码:

test <- sample(1:50)
data <- rollmean(test, 7, fill = list(NA, NULL, NA), align = "right")

test <- cbind(test, data)
Run Code Online (Sandbox Code Playgroud)

r zoo

0
推荐指数
2
解决办法
1224
查看次数

标签 统计

r ×8

zoo ×3

apply ×1

arrays ×1

average ×1

data.table ×1

mean ×1

plyr ×1

running-total ×1

tidyverse ×1

time-series ×1

window ×1