You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中按指定列分组,获取对应列各层级的最小值方法

在R中按A2、A3分组并提取number各层级的time最小值

示例数据集

df <- structure(list(ID=c('a','a','a','a','b','b','b','b','c','c','c','c','d','d','d','d','e','e','e','e','f','f','f','f','g','g','g','g','h','h','h','h'),
                     A2=c('d1','d1','d1','d1','d1','d1','d1','d1','d2','d2','d2','d2','d2','d2','d2','d2','d1','d1','d1','d1','d1','d1','d1','d1','d2','d2','d2','d2','d2','d2','d2','d2'),
                     A3=c('g1','g1','g1','g1','g1','g1','g1','g1','g1','g1','g1','g1','g1','g1','g1','g1','g2','g2','g2','g2','g2','g2','g2','g2','g2','g2','g2','g2','g2','g2','g2','g2'),
                     number=c('1','1','2','2','1','1','2','2','1','1','2','2','1','1','2','2','1','1','2','2','1','1','2','2','1','1','2','2','1','1','2','2'),
                     time=c(23,345,123,4,434,76,245,34,135,98,45,678,32,134,76,578,32,145,256,79,311,356,67,12,689,467,98,456,23,45,23,34)), 
                class = "data.frame", row.names = c(NA,-32L))

解决方案

方法1:使用dplyr包(推荐,代码简洁易读)

library(dplyr)

df.result <- df %>%
  # 按A2、A3、ID、number分组(需保留ID故加入分组)
  group_by(A2, A3, ID, number) %>%
  # 提取每组time的最小值
  summarize(time = min(time), .groups = "drop") %>%
  # 调整行顺序匹配期望结果
  arrange(A2, A3, ID, number)

方法2:使用base R(无需额外安装包)

# 按指定列分组计算time最小值
df.result <- aggregate(time ~ A2 + A3 + ID + number, data = df, FUN = min)
# 调整行顺序
df.result <- df.result[order(df.result$A2, df.result$A3, df.result$ID, df.result$number), ]
# 重置行名
rownames(df.result) <- NULL

验证结果

运行上述代码后,可通过以下代码确认结果与期望一致:

# 期望结果数据集
df.expected <- structure(list(ID=c('a','a','b','b','c','c','d','d','e','e','f','f','g','g','h','h'),
                          A2=c('d1','d1','d1','d1','d2','d2','d2','d2','d1','d1','d1','d1','d2','d2','d2','d2'),
                          A3=c('g1','g1','g1','g1','g1','g1','g1','g1','g2','g2','g2','g2','g2','g2','g2','g2'),
                          number=c('1','2','1','2','1','2','1','2','1','2','1','2','1','2','1','2'),
                          time=c(23,4,76,34,98,45,32,76,32,79,311,12,467,98,23,23)), 
                     class = "data.frame", row.names = c(NA,-16L))

# 检查是否一致
all.equal(df.result, df.expected)

内容的提问来源于stack exchange,提问作者Pegi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:05:23