在data.table中统计分组内等于最大值的记录数
在data.table中统计分组内等于最大值的行数
你可以通过data.table的分组操作直接实现需求,以下是两种可行方案:
方案1:基于已生成的maxsize列统计
如果你需要保留maxsize列,在现有代码基础上新增计数列即可:
set.seed(5) z <- data.table( data.frame( group=( sample( letters[1:5], 25, replace=T) ), size=( sample( 1:5, 25, replace=T) ))) z <- z[ order( group, size ), ] # 生成分组最大值列 z[ , maxsize := max(size), by = .(group)] # 新增列统计等于最大值的行数 z[ , count_max := sum(size == maxsize), by = .(group)]
方案2:一步到位(无需单独存最大值列)
如果不需要保留maxsize列,可以直接在分组内计算最大值并统计行数,更高效:
set.seed(5) z <- data.table( data.frame( group=( sample( letters[1:5], 25, replace=T) ), size=( sample( 1:5, 25, replace=T) ))) z <- z[ order( group, size ), ] # 直接新增计数列,一步完成最大值计算与统计 z[ , count_max := sum(size == max(size)), by = .(group)]
结果说明
执行后count_max列会展示每个分组内等于最大值的行数:
- a组对应值为2(2条观测值等于最大值3)
- b组对应值为4(4条观测值等于最大值5)
- c组对应值为2(2条观测值等于最大值5)
以此类推。
内容的提问来源于stack exchange,提问作者MatthewR
相关产品推荐
相关产品推荐

