R 如何使用data.table与以前的数据进行比较

R 如何使用data.table与以前的数据进行比较,r,data.table,R,Data.table,假设我有一个如下的数据表 DT <- data.table(DATE = as.Date(1:10), X = 1:100) 我试过zoo::rollmean,但它似乎只接受“前进”方向,而不是“后退”方向。非常感谢 接下来的问题,即使我想知道我是否要计算前3行乘以前2行?这就像,row8,X=8,我想得到平均值(3:5)你可以使用library zoo轻松地完成 library(zoo) DT$rollmean <- rollmeanr(DT$X,5,fill=NA) 图书

假设我有一个如下的数据表

DT <- data.table(DATE = as.Date(1:10), X = 1:100)  
我试过
zoo::rollmean
,但它似乎只接受“前进”方向,而不是“后退”方向。非常感谢


接下来的问题,即使我想知道我是否要计算前3行乘以前2行?这就像,row8,X=8,我想得到平均值(3:5)

你可以使用library zoo轻松地完成

library(zoo)
DT$rollmean <- rollmeanr(DT$X,5,fill=NA)
图书馆(动物园)

DT$rollmean您可以使用library zoo轻松完成此操作

library(zoo)
DT$rollmean <- rollmeanr(DT$X,5,fill=NA)
图书馆(动物园)

DT$rollmean在data.table 1.12.0中有一个新的
frollmean
函数,因此您可以执行以下操作

DT <- data.table(DATE = as.Date(1:10), X = 1:100)  
DT=data.table(日期=as.DATE(1:10,origin=“1970-01-01”),X=1:100)
ans=DT[1:10
][,rollmean:=移位(frollmean(X,5))
][]
ans
#日期X平均值
#1:1970-01-02 1 NA
#2:1970-01-03 2 NA
#3:1970-01-04 3北美
#4:1970-01-05 4 NA
#5:1970-01-06 5 NA
# 6: 1970-01-07     6        3
# 7: 1970-01-08     7        4
# 8: 1970-01-09     8        5
# 9: 1970-01-10     9        6
#10: 1970-01-11    10        7

在data.table 1.12.0中有一个新的
frollmean
函数,因此您可以执行以下操作

DT <- data.table(DATE = as.Date(1:10), X = 1:100)  
DT=data.table(日期=as.DATE(1:10,origin=“1970-01-01”),X=1:100)
ans=DT[1:10
][,rollmean:=移位(frollmean(X,5))
][]
ans
#日期X平均值
#1:1970-01-02 1 NA
#2:1970-01-03 2 NA
#3:1970-01-04 3北美
#4:1970-01-05 4 NA
#5:1970-01-06 5 NA
# 6: 1970-01-07     6        3
# 7: 1970-01-08     7        4
# 8: 1970-01-09     8        5
# 9: 1970-01-10     9        6
#10: 1970-01-11    10        7

见谢谢,但我无法得到结果,请参考我的实验作为更新的try
DT[,RM:=rollappyr(X,list(-seq(5)),mean,fill=NA)]
和后续的qn:
DT[,RM:=rollappyr(X,list(-3L:-5L),mean,fill=NA)]
谢谢,它适用于玩具示例,但在我的真实案例中使用时,会出现错误,而我将更改数据格式作为示例<代码>RHS(“逻辑”)的类型必须与LHS(“双精度”)匹配。对于最快的情况,检查和强制将对性能产生太大的影响。要么更改目标列的类型,要么强制RHS为:=您自己(例如,使用1L而不是1)
Pls advice.use
fill=NA_real\uu
而不是
fill=NA
请参见感谢,但我无法得到结果,请将我的实验称为updatetry
DT[,RM:=rollappyr(X,list(-seq(5)),平均值,fill=NA)]
对于后续的qn:
DT[,RM:=rollappyr(X,list(-3L:-5L),mean,fill=NA)]
谢谢,它适用于玩具示例,但是在我的真实案例中使用时,会出现错误,而我会将数据格式更改为玩具示例<代码>RHS(“逻辑”)的类型必须与LHS(“双精度”)匹配。对于最快的情况,检查和强制将对性能产生太大的影响。要么更改目标列的类型,要么强制RHS为:=您自己(例如,使用1L而不是1)
Pls advice.use
fill=NA_real\uu
而不是
fill=NA
嗨,Hunaudkan,我猜我误导了你。我是指前5个obv。根据您的建议,我将获得下一个5个obv。仍然感谢您。我得到的输出与您在预期输出中提供的输出相同,rollmean取过去的5个值而不是远期值。让我再次检查,我一定是做错了什么。谢谢嗨,Hunaudkan,我想我误导了你。我是指前5个obv。根据您的建议,我将获得下一个5个obv。仍然感谢您。我得到的输出与您在预期输出中提供的输出相同,rollmean取过去的5个值而不是远期值。让我再次检查,我一定是做错了什么。谢谢