如何在多列数据表上进行rollapply操作?

我想在一个多列的datable上使用rollapply函数,即我想能够独立地使用每一列,例如让我们考虑以下datable。

> DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
> DT
   x y v
1: a 1 1
2: a 3 2
3: a 6 3
4: b 1 4
5: b 3 5
6: b 6 6
7: c 1 7
8: c 3 8
9: c 6 9

然后,我想使用rollapply作为一个滚动子集,以便计算出第2列和第3列的3个元素的滚动平均值,并将它们存储到外部变量中。

> r1= NA; r2 = NA
> ft=function(x) { r1=mean(x[,2,with=FALSE]) ; r2=mean(x[,3,with=FALSE]) }
> rollapply(DT, width=3, ft)
 Error in x[, 2, with = FALSE] : incorrect number of dimensions 

除了我得到了这个不方便的错误,为什么它不工作?

输出结果是 。

> r1
[1] 3.333333 3.333333 3.333333 3.333333 3.333333 3.333333 3.333333
> r2
[1] 2 3 4 5 6 7 8

解决方案:

你几乎可以做到这一点。

lapply(DT[,2:3], function(x) rollapply(x,width=3, FUN=mean))
#$y
#[1] 3.333333 3.333333 3.333333 3.333333 3.333333 3.333333 3.333333

#$v
#[1] 2 3 4 5 6 7 8

给TA打赏
共{{data.count}}人
人已打赏
未分类

带重复行的Awk合并文件

2022-9-8 17:36:18

未分类

我可以用同一个用户从两个或多个地方开发一个git repo吗?

2022-9-8 17:36:20

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索