You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动