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

R语言DataFrame分组后保留value列最接近0的行的实现方法

解决方案

你可以直接基于dplyr的分组过滤逻辑实现,核心思路是比对每组内value的绝对值,保留所有绝对值等于组内最小值的行,天然支持相反数同时保留的需求:

  1. 加载dplyr包并构造示例数据
library(dplyr)
df <- data.frame(
  cond1 = c("a","a","a","b","b"),
  cond2 = c(1,1,2,3,3),
  value = c(10,-20,5,-5,12)
)
  1. 核心处理代码
result <- df %>%
  group_by(cond1, cond2) %>%
  filter(abs(value) == min(abs(value))) %>%
  ungroup()

输出结果和预期一致:

cond1 cond2 value
  <chr> <dbl> <dbl>
1 a         1    10
2 a         2     5
3 b         3    -5

如果组内存在互为相反数的数值(比如同组有5和-5),两者的绝对值相等且都是组内最小值,会被同时保留。
如果处理的数据量较大,可以用data.table实现更高的运行效率:

library(data.table)
setDT(df)
result <- df[, .SD[abs(value) == min(abs(value))], by = .(cond1, cond2)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:15:03