相关疑难解决方法(0)

如何使用data.table获取滚动产品

dt <- data.table(x=c(1, .9, .8, .75, .5, .1))
dt
      x
1: 1.00
2: 0.90
3: 0.80
4: 0.75
5: 0.50
6: 0.10
Run Code Online (Sandbox Code Playgroud)

对于每一行,如何获取该行和接下来两行的x乘积?

      x Prod.3
1: 1.00 0.7200
2: 0.90 0.5400
3: 0.80 0.3000
4: 0.75 0.0375
5: 0.50     NA
6: 0.10     NA
Run Code Online (Sandbox Code Playgroud)

更一般地说,对于每一行,如何获得该行和接下来的n行的x乘积?

r data.table

11
推荐指数
3
解决办法
3056
查看次数

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 data.table与rollapply

是否存在使用data.table分组计算滚动统计信息的现有习惯用法?

例如,给出以下代码:

DT = data.table(x=rep(c("a","b","c"),each=2), y=c(1,3), v=1:6)
setkey(DT, y)

stat.ror <- DT[,rollapply(v, width=1, by=1, mean, na.rm=TRUE), by=y];
Run Code Online (Sandbox Code Playgroud)

如果还没有,那最好的方法是什么?

r data.table

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

计算加权滚动平均值R

假设我在dataframe / data.table中有两列,一列是级别,另一列是音量。我想计算按音量加权的级别的滚动平均值,因此对于某些滚动窗口,体积充当权重(归一化为1)。

基数R具有weighted.mean()函数,该函数对两个静态向量进行类似的计算。我尝试使用sapply将list / vector fo参数传递给它,并创建了rollign系列,但无济于事。

我应该与weighted.mean()一起使用哪种“应用”机制才能获得所需的结果,否则我将不得不循环/编写自己的函数?

///////////////////////////////////////////////////// ///////////////////////////////////////

最后,我决定编写简单的自定义函数,该函数利用了出色的RccpRoll软件包。我发现RccpRoll速度快,比其他滚动方法快得多,这对我来说很重要,因为我的数据有几百万行。

该函数的代码如下所示(由于RccpRoll返回不带NA的数据,因此我在开头增加了一些NA):

require(RcppRoll)
my.rollmean.weighted <- function(vec1,vec2,width){
   return(c(rep(NA,width-1),roll_sum(vec1*vec2,width)/roll_sum(vec2,width)))
}
Run Code Online (Sandbox Code Playgroud)

r

4
推荐指数
2
解决办法
4509
查看次数

在R中构造分类变量的移动平均值

我正在寻找构建移动平均线,同时在两个分类变量上聚合时间序列数据集.虽然我已经看过其他一些教程,但它们似乎都没有捕捉到我想要实现的特定任务.

我的原始数据集(df)包含每个个体(id)的行,用于一系列日期,范围从0到180(Days).个人可以是两个数据子集之一的成员(Group).

然后我汇总这个数据框以获得两组的每日均值.

library(plyr)
summary <- ddply(df, .(Group,Days), summarise,
                      DV = mean(variable), resp=length(unique(Id)))
Run Code Online (Sandbox Code Playgroud)

然而,下一步是两组构建移动平均线.在下面的示例数据框中,我刚刚使用前5天构建了一个5天的平均值.

Group       Days  DV    5DayMA
exceeded    0   2859    
exceeded    1   2948    
exceeded    2   4412    
exceeded    3   5074    
exceeded    4   5098    4078
exceeded    5   5147    4536
exceeded    6   4459    4838
exceeded    7   4730    4902
exceeded    8   4643    4815
exceeded    9   4698    4735
exceeded    10  4818    4670
exceeded    11  4521    4682
othergroup  0   2859    
othergroup  1   2948 …
Run Code Online (Sandbox Code Playgroud)

r

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

如何对曲线下面积的计算进行矢量化

我的目标:我每5行计算一次xts列的曲线下面积.

我的目标:我想知道R中是否有一个函数可以更快地(向量化它)而不是从myxts5的列中生成一个向量然后循环计算.

谢谢你的帮助.

我已经包含了我的代码,输出和数据集:

#create an xts object
library(xts)
myxts5<-xts(dat5[,2:7],order.by=as.POSIXct(dat5[,1]))
colnames(myxts5)<-c("Open","High","Low","Close","Volume","RSI_10")

#make the data reproducible
dput(myxts5,file='so4.txt')

#my method to calculate the entire area under the RSI
library(MESS)

y1<-as.vector(myxts5[11:nrow(myxts5),"RSI_10"]) #remove the first 10 NAs
x1<-1:length(y1)

AUC_RSI10<-NA
for(i in 1:(length(y1)-4))
{
  AUC_RSI10[i]<-auc(x1,y1,from=i,to=i+4,type="spline") 

}

#output the result
dput(AUC_RSI10,file='so5.txt')
Run Code Online (Sandbox Code Playgroud)

这是我的输出:

c(212.42031469304, 212.798819901101, 209.986805467201, 204.085562604063, 
197.984367949833, 190.26277666882, 186.077746687353, 175.748595915665, 
153.079882459862, 130.009179454897, 102.067828644029, 93.1546072252816, 
106.253169598421, 126.695279601823, 156.84779427326, 171.19433284721, 
177.724612560769, 176.407343545939, 180.185730377015, 185.540559407078, 
181.492038514392, 189.691635230233, 184.490969841544, 188.753967108042, 
207.705900307578, 214.048826298562, 218.30216750124, 212.29968278624, 
199.551248663318, 188.776300102749, 182.52612752936, 181.256931078184, 
186.756042540598, 192.301043062924, …
Run Code Online (Sandbox Code Playgroud)

r auc

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

标签 统计

r ×6

data.table ×3

arrays ×1

auc ×1

tidyverse ×1