使用group by子集data.table列

时间:2015-09-04 09:08:40

标签: r data.table

是否可以在对data.table进行分组并选择最小值时从data.table中提取额外的列?

DT <- data.table(events)
firstOrders <- as.data.frame(DT[,min(property_time),by=property_.uid])

在这个例子中,应该提取orderids(这是events-df中的一列),因此在userid-group中时间最小的ordernumber。

1 个答案:

答案 0 :(得分:3)

我想我们希望得到min值为&#39; property_time&#39;的行,按&#39; property_.uid&#39;分组。在这种情况下,我们可以使用which.min获取数字索引并使用它来对数据集进行子集化(.SD)。

 DT[,.SD[which.min(property_time)],by=property_.uid]

更快的选择是使用.I获取行索引,然后对数据集

进行子集化
 i1 <- DT[,.I[which.min(property_time)],by=property_.uid]$V1
 DT1 <- DT[i1]

数据

set.seed(25)
DT <- data.table(property_.uid=rep(1:3, each=3), 
   property_time=sample(1:15, 9, replace=TRUE), OtherCol=rnorm(9))