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

在R中按Brand分组,提取Candy列A、B对应最大值的数据集

Hey Robert, 刚好我之前处理过类似的需求,给你分享几种R里靠谱的实现方式,都能完美达到你要的效果:

实现按Brand分组提取Candy=A/B对应value最大值

下面是三种常用方案,你可以根据自己的习惯和数据规模选择:

方案1:用dplyr(tidyverse风格,可读性拉满)

这是我平时最常用的写法,步骤清晰,新手也容易理解。首先确保你装了dplyr包:

# 首次使用先安装
install.packages("dplyr")
library(dplyr)

然后一行链操作搞定:

result_dplyr <- candyData %>%
  # 先筛选出Candy为A或B的行,避免多余数据干扰
  filter(Candy %in% c("A", "B")) %>%
  # 按Brand和Candy双重分组,这样每个Brand下的A/B会分开计算
  group_by(Brand, Candy) %>%
  # 计算每组的value最大值,na.rm用来处理可能的缺失值
  summarise(max_value = max(value, na.rm = TRUE)) %>%
  # 取消分组,转成普通数据框方便后续操作
  ungroup()

方案2:用data.table(大数据场景首选,速度超快)

如果你的candyData行数特别多,data.table的性能优势会很明显,语法也很简洁:

install.packages("data.table")
library(data.table)

# 把普通数据框转成data.table格式
setDT(candyData)

# 直接筛选+分组计算一步到位
result_dt <- candyData[Candy %in% c("A", "B"), 
                       .(max_value = max(value, na.rm = TRUE)), 
                       by = .(Brand, Candy)]

方案3:基础R实现(不用装任何包)

要是不想额外安装包,用基础R的aggregate函数也能轻松实现:

# 先筛选出需要的Candy类型
filtered_data <- candyData[candyData$Candy %in% c("A", "B"), ]

# 按Brand和Candy分组,计算最大值
result_base <- aggregate(value ~ Brand + Candy, 
                         data = filtered_data, 
                         FUN = function(x) max(x, na.rm = TRUE))

# 把结果列名改成和前面一致的max_value
colnames(result_base)[3] <- "max_value"

结果说明

不管用哪种方法,最终得到的数据集都会是你想要的结构:每个Brand对应两行(分别是Candy=A和Candy=B),第三列是对应分组下的value最大值。比如Nestle的条目会出现两次,分别对应A和B的最大值。

另外提一句:na.rm = TRUE是为了处理value列可能存在的NA值,如果你的数据里没有缺失值,这个参数可以去掉~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:56:13