使用 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))
是否可以在对 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))