在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
相关产品推荐
相关产品推荐

