2012-09-27 40 views
3

我对data.table没有经验,所以我不知道我的问题是否有解决方案(Google上30分钟至少没有给出答案),但在此处去。按组创建data.table中的新列

随着data.frame我经常使用下面的命令检查的唯一值的观测次数:

df$Obs=with(df, ave(v1, ID-Date, FUN=function(x) length(unique(x)))) 

是否与data.table工作时,任何相应的方法?

干杯! :)

+2

这里绝对是data.tables具体方法。查看[vignettes](http://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.pdf)和[faqs](http://datatable.r-forge。 r-project.org/datatable-faq.pdf)! – BenBarnes

回答

3

是的,有。令人高兴的是,你问的data.table的最新功能之一,加入v1.8.2的:

:=通过小组目前正在实施(FR#1491),并参考目前子分配给新列 自动添加列(使用NA初始化,其中 子分配不触及)(FR#1997)。 :=按组可以与所有 类型i组合,所以:=按组包括由i以及by分组。 由于:=按组参考,因此 方法(直接或间接)cbind将分组结果转换为DT,因为 根本没有(大)DT的副本。这是一个短而自然的语法, 可以与其他查询混合。
DT[,newcol:=sum(colB),by=colA]

在你的榜样,IIUC,它应该是这样的:

DT[, Obs:=.N, by=ID-Date] 

代替:

df$Obs=with(df, ave(v1, ID-Date, FUN=function(x) length(unique(x)))) 

注意:=按组很好地扩展为大型数据集(而较小的数据集将会有很多小团体)。

?":="Search data.table tag for "reference"