R的最后观察数据。每组的数据

时间:2014-01-15 19:36:13

标签: r data.table

我有一个data.table,其行包含id,month,date和value。我想为每个(id,month)对选择最后一个观察。目前我做的是以下这个很慢。想要更好地实施?

require(data.table)
d = data.table(id = rep(1:3, each = 12*3), mo = rep(1:12,each=3), day = 1:3, key=c("id", "mo", "day")) #this is a data table with 3 ids, 12 months and 3 days per month
system.time(rslt <- d[,tail(.SD,1),by=list(id, mo)])
#    user  system elapsed 
#   0.019   0.000   0.020 

应该有更好的方法来做到这一点。注意:月末的日期可能因身份而异,所以我不能简单地setkey(d, day); d[J(3)]。我想到的一个可能的解决方案是提取所有(id, mo)对并执行:

setkey(d, id, mo)
p = unique(d)[,day:=NULL]
setkey(p, id, mo)
system.time(rslt2 <- d[p, mult="last"])
#    user  system elapsed 
#   0.001   0.000   0.001 
identical(rslt2, rslt)
#  [1] TRUE

0 个答案:

没有答案
相关问题