如何在R语言中选取重复值序列中的第二或第三小值?
获取向量中去重后的第k小值
嘿,我来帮你搞定这个需求!从你的描述来看,你想要的是跳过重复最小值后,去重的第2、3小唯一值(也就是6和7),下面给你几种实用的实现方法:
方法1:先去重再排序取值
这是最直观的思路——先把向量里的重复值去掉,再排序,之后直接按索引取对应位置的值就行:
x <- c(12, 5, 6, 7, 8, 5, 8, 7, 5, 6, 9, 10) # 去重并排序得到唯一值的有序向量 unique_sorted_x <- sort(unique(x)) # 取去重后的第二小值(索引为2) second_smallest <- unique_sorted_x[2] # 取去重后的第三小值(索引为3) third_smallest <- unique_sorted_x[3] print(second_smallest) # 输出结果:6 print(third_smallest) # 输出结果:7
方法2:基于你已有的排序向量处理
你已经得到了排序后的向量p,也可以直接对p去重后再取索引,结果和上面完全一致:
p <- x[order(x)] # 对排序后的向量去重 unique_p <- unique(p) second_smallest <- unique_p[2] third_smallest <- unique_p[3]
毕竟sort(unique(x))和unique(sort(x))的输出是一模一样的,选哪种都可以。
额外补充:如果需要不去重的第k个元素
如果你之后有其他场景,比如要的是包含重复值的排序后第k个元素(比如排序后第4个元素是6,对应原数据里的“第4小”),那直接用你已经有的p按索引取就好:
# 排序后第4个元素(跳过前3个5) p[4] # 输出6 # 排序后第6个元素 p[6] # 输出7
不过根据你的问题描述,前两种方法才是贴合你需求的最优解~
内容的提问来源于stack exchange,提问作者giarno




