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

使用R按name与name2组合计算数据框pos列的最小最大值

解决方法:按分组计算pos的最小/最大值

这需求在数据处理里很常见,我给你两种常用的实现方式,你可以根据自己的习惯选择:

方法一:使用Base R的aggregate函数

不需要额外安装包,直接用R自带的函数就能搞定:

# 先确认你的数据框df已经创建好
df <- data.frame(c(11:15,4:7,21:24), c(rep("A",9),rep("B",4)), c(rep("X",5),rep("Y",4),rep("X",4)))
colnames(df) <- c("pos","name","name2")

# 分组聚合计算min和max
df_new <- aggregate(pos ~ name + name2, data = df, FUN = function(x) c(min = min(x), max = max(x)))
# 将聚合后的列表列展开为普通数据框
df_new <- do.call(data.frame, df_new)

# 查看结果
print(df_new)

运行后你会得到完全符合要求的df_new,aggregate会自动按name和name2的唯一组合分组,自定义函数返回的min和max会被整理成单独的列。

方法二:使用dplyr包(tidyverse工具链)

如果你平时习惯用tidyverse的语法,这种方式更直观易读:

# 先安装并加载dplyr(如果没安装过的话)
# install.packages("dplyr")
library(dplyr)

df_new <- df %>%
  # 按name和name2分组
  group_by(name, name2) %>%
  # 计算每组的pos最小值和最大值
  summarise(
    pos_min = min(pos),
    pos_max = max(pos),
    .groups = "drop"  # 计算完成后取消分组状态,返回普通数据框
  )

# 查看结果
print(df_new)

这种链式语法逻辑清晰,后续如果需要添加更多统计量也很方便。

两种方法最终生成的df_new都会和你想要的格式完全一致:

name name2 pos_min pos_max
1    A     X      11      15
2    B     X      21      24
3    A     Y       4       7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:19:59