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

R ddply()分组取某列最小值时如何获取对应其他列的数值

问题解决方案

错误原因

你代码出错的核心问题是:ddply按国家拆分数据集后,处理每个分组的子数据时,你调用了全局的df来计算which.min,相当于每次都取全量数据集里cost最小值对应的机场,自然所有国家返回的机场名称都完全一致。另外硬编码列位置df[,3]的写法稳定性极差,数据集列顺序调整后直接出错,推荐直接用列名调用。

修复代码

方案1:保持使用plyr包的ddply语法

不要在summarize里调用全局df,直接使用分组子数据的列名即可:

library(plyr)
result <- ddply(df, .(country), summarize,
                LowestCost = min(cost),
                AirportName = airport[which.min(cost)])

如果出现和dplyr同名函数冲突的问题,可以指定函数所属包:

result <- ddply(df, .(country), plyr::summarize,
                LowestCost = min(cost),
                AirportName = airport[which.min(cost)])

方案2:使用现在更通用的dplyr包语法

逻辑更直观,性能也更好:

library(dplyr)
result <- df %>%
  group_by(country) %>%
  # 取每个分组cost最小的行,with_ties=FALSE表示多个最小值时仅返回第一个
  slice_min(order_by = cost, n = 1, with_ties = FALSE) %>%
  # 按需求重命名、选择输出列
  select(country, LowestCost = cost, AirportName = airport)

如果需要保留同一个国家内所有cost并列最低的机场,删除with_ties = FALSE参数即可。

两种方案运行后得到的结果都和你给出的预期输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:18:03