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

R语言提取X列前两大值的所有行(含重复值)问题

解决方案

首先修正你原始数据中的语法错误(Y列里的"Z" "Y"缺少逗号,否则会报错):

df <- tibble(
  X = c("1", "1", "3", "3", "5", "5", "6", "6", "6"),
  Y = c("X", "Y", "X", "Z", "Z", "Y", "Y", "X", "Z")
)

top_n函数的问题在于它是按行数取数,而非按唯一值的排名取数,所以当某个X值对应多行时,它无法提取所有属于前两大X值的行。以下是两种通用解决方法:

方法一:提取前两大唯一值后过滤

先提取X列的所有唯一值,筛选出数值最大的两个,再过滤原数据中X属于这两个值的所有行:

library(dplyr)

# 获取前两大的X值(先转数值排序,再转回字符用于匹配)
top_two_X <- df %>%
  distinct(X) %>%
  mutate(X_num = as.numeric(X)) %>%
  slice_max(order_by = X_num, n = 2) %>%
  pull(X)

# 过滤目标行
output <- df %>%
  filter(X %in% top_two_X)

方法二:使用排名函数直接过滤

通过dense_rank计算X值的排名(相同值排名相同),直接筛选排名≤2的行:

output <- df %>%
  mutate(X_num = as.numeric(X)) %>%
  filter(dense_rank(desc(X_num)) <= 2) %>%
  select(-X_num) # 移除辅助列

运行后得到的output就是你需要的结果:

# A tibble: 5 × 2
  X     Y    
  <chr> <chr>
1 5     Z    
2 5     Y    
3 6     Y    
4 6     X    
5 6     Z    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:41:03