滚动平均值(变化滞后) 库(tidyverse)

滚动平均值(变化滞后) 库(tidyverse),r,dplyr,data.table,R,Dplyr,Data.table,如何计算以下深度的平均值:变量y和z的1-2、1-3、1-4、…、1-10。请注意,在我的实际数据中,我没有相同的空间深度,因此我不能直接使用rollapply set.seed(123) 深度y z #> 1 1.000000 -0.56047565 -0.71040656 #> 2 1.090909 -0.23017749 0.25688371 #> 3 1.181818 1.55870831 -0.24669188 #> 4 1.272727 0.07050839 -0.347542

如何计算以下深度的平均值:变量y和z的1-2、1-3、1-4、…、1-10。请注意,在我的实际数据中,我没有相同的空间深度,因此我不能直接使用rollapply

set.seed(123)
深度y z
#> 1 1.000000 -0.56047565 -0.71040656
#> 2 1.090909 -0.23017749  0.25688371
#> 3 1.181818  1.55870831 -0.24669188
#> 4 1.272727  0.07050839 -0.34754260
#> 5 1.363636  0.12928774 -0.95161857
#> 6 1.454545  1.71506499 -0.04502772
所需输出的示例

df%>%
过滤器(在(深度,1,2)之间)%>%
在(变量(y,z),平均值)%>%时总结
变异(开始深度=1,结束深度=2)
#>y z开始深度结束深度
#> 1 0.1941793 -0.3271552           1         2
df%>%
过滤器(在(深度,1,3)之间)%>%
在(变量(y,z),平均值)%>%时总结
变异(开始深度=1,结束深度=3)
#>y z开始深度结束深度
#> 1 0.02263796 -0.3699128           1         3
df%>%
过滤器(在(深度,1,4)之间)%>%
在(变量(y,z),平均值)%>%时总结
变异(开始深度=1,结束深度=4)
#>y z开始深度结束深度
#> 1 0.01445704 -0.1993295           1         4
等等…
由(v0.2.1)

OP于2018年10月23日创建的,已经有代码一次创建一个输出,因此我猜请求是一次完成所有操作:

library(data.table)
setDT(df)

cols = c("y", "z")
mDT = data.table(start_depth = 1, end_depth = as.numeric(1:10))
res = df[mDT, on=.(depth >= start_depth, depth <= end_depth), 
  lapply(.SD, mean), by=.EACHI, .SDcols=cols]    
setnames(res, c(names(mDT), cols))

    start_depth end_depth           y           z
 1:           1         1 -0.56047565 -0.71040656
 2:           1         2  0.19417934 -0.32715522
 3:           1         3  0.02263796 -0.36991283
 4:           1         4  0.01445704 -0.19932946
 5:           1         5  0.06702734 -0.27118566
 6:           1         6  0.08145323 -0.21811183
 7:           1         7  0.03197788 -0.13311881
 8:           1         8  0.01918313 -0.10335488
 9:           1         9  0.03956002 -0.08520866
10:           1        10  0.09040591 -0.10754680
库(data.table)
setDT(df)
cols=c(“y”、“z”)
mDT=data.table(开始深度=1,结束深度=as.numeric(1:10))

res=df[mDT,on=。(depth>=start\u depth,depthOP已经有代码一次创建一个输出,所以我猜请求是一次完成所有操作:

library(data.table)
setDT(df)

cols = c("y", "z")
mDT = data.table(start_depth = 1, end_depth = as.numeric(1:10))
res = df[mDT, on=.(depth >= start_depth, depth <= end_depth), 
  lapply(.SD, mean), by=.EACHI, .SDcols=cols]    
setnames(res, c(names(mDT), cols))

    start_depth end_depth           y           z
 1:           1         1 -0.56047565 -0.71040656
 2:           1         2  0.19417934 -0.32715522
 3:           1         3  0.02263796 -0.36991283
 4:           1         4  0.01445704 -0.19932946
 5:           1         5  0.06702734 -0.27118566
 6:           1         6  0.08145323 -0.21811183
 7:           1         7  0.03197788 -0.13311881
 8:           1         8  0.01918313 -0.10335488
 9:           1         9  0.03956002 -0.08520866
10:           1        10  0.09040591 -0.10754680
库(data.table)
setDT(df)
cols=c(“y”、“z”)
mDT=data.table(开始深度=1,结束深度=as.numeric(1:10))

res=df[mDT,on=。(depth>=start\u depth,depth)您能显示所需的输出吗?您想要
df[2:3]我指定了所需的输出,以使我的问题更清楚。您可能会发现
rollappyr
函数很有用。您能显示所需的输出吗?您想要
df[2:3]我指定了所需的输出,以使我的问题更清楚。您可能会发现
rollappyr
函数很有用。工作正常,谢谢。如果我想按组进行,我可以这样做:res=df[mDT,on=。(filename,pdbar>=start\u depth,pdbar很高兴它能工作,yw.Yep,只要filename在两个表中(mDT和df)都能正常工作,谢谢。如果我想按组进行,我可以这样做:res=df[mDT,on=。(filename,pdbar>=start\u depth,pdbar很高兴它能工作,yw.yesp,只要filename在两个表中(mDT和df)就可以工作