【发布时间】:2020-07-02 00:30:54
【问题描述】:
我在对数据进行分组时尝试在 data.table 中使用包 zoo 中的 rollmean。
当所有组都有足够的数据时,它可以正常工作:
library(data.table)
dt = data.table(x=rep(c("a","b"),10),y=rnorm(20))
dt[,.(ma=rollmean(y, k = 7, fill=NA,align="right")), by = .(x)]
但是当其中一组数据太少时,它会返回错误
dt2 = data.table(x=rep(c("c"),1),y=rnorm(1))
dt3=rbind(dt,dt2)
dt3[,.(ma=rollmean(y, k = 7, fill=NA,align="right")), by = .(x)]
这是错误信息:
第 3 组结果的第 1 列是“逻辑”类型,但需要“双精度”类型。每个组的列类型必须一致。
这似乎是因为当它没有足够的数据时,rollmean 返回一个逻辑(TRUE 和 NA 的混合)
鉴于我的数据总是积极的,我使用以下技巧来让我的代码运行
dt4=dt3[,.(ma=rollmean(y, k = 7, fill=-1,align="right")), by = .(x)]
dt4[ma==-1,ma:=NA]
dt4
有合适/更好的方法吗?
【问题讨论】:
标签: r data.table mean