使用 group by 对列 data.table 进行子集化

Subsetting columns data.table using group by

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

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

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

我想我们想要获取 min 值为 'property_time' 的行,按 'property_.uid' 分组。在这种情况下,我们可以使用 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))