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

在R语言中筛选数据框某列各整数分组的首个小数行

解决方案

你可以通过提取x列的整数部分作为分组依据,然后在每个分组中筛选出x值最小的行,以下是几种可行的实现方式:

方法1:Base R 实现

通用方法(无需提前排序)

# 为数据框添加整数分组列
z$group <- floor(z$x)
# 筛选每组中x等于该组最小值的行
result <- z[z$x == ave(z$x, z$group, FUN = min), ]
# 移除临时分组列
result <- result[, c("x", "y")]

# 查看结果
print(result)

简化方法(利用已排序的特性)

因为你已经将数据按x升序排列,每组的第一行就是x最小的行,可直接去重分组:

z$group <- floor(z$x)
result <- z[!duplicated(z$group), ]
result <- result[, c("x", "y")]

print(result)

方法2:dplyr(tidyverse)实现

如果你习惯使用tidyverse工具链,代码会更直观:

library(dplyr)

result <- z %>%
  # 创建整数分组列
  mutate(group = floor(x)) %>%
  # 按分组聚合
  group_by(group) %>%
  # 筛选每组x最小的行
  filter(x == min(x)) %>%
  # 取消分组
  ungroup() %>%
  # 移除临时分组列
  select(-group)

print(result)

同样,利用已排序的特性,也可以用slice_head直接取每组第一行:

result <- z %>%
  mutate(group = floor(x)) %>%
  group_by(group) %>%
  slice_head(n = 1) %>%
  ungroup() %>%
  select(-group)

print(result)

以上方法都会得到你期望的结果:

x    y
13 1.08 1.57
1  2.04 2.62
17 3.04 2.12
16 4.53 3.32

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:06:25