已知向量的排序索引与排序后向量,如何还原原始向量?
还原原始向量x的方法
嘿,这个问题其实核心是搞懂order()返回的索引到底代表什么,然后利用R的索引赋值特性就能轻松还原原始向量啦!
原理拆解
首先回忆下order(x)的作用:它返回的是能让原向量x按升序排列的索引位置——换句话说,x[y]会得到排序后的向量z。那反过来想,我们只需要把排序后的z元素,重新放回它们在原始向量中的位置就行。
具体实现步骤
我们用你给出的示例数据来演示:
- 先重现原始场景:
set.seed(123) x <- rnorm(100) y <- order(x) z <- x[y]
- 还原原始向量x:
# 创建一个和原向量长度一致的空向量 x_restored <- numeric(length(y)) # 把z的元素放回y指定的原始位置 x_restored[y] <- z
- 验证还原结果:
# 检查还原后的向量和原向量是否完全一致 all.equal(x, x_restored) # 输出结果会是 TRUE,说明还原成功!
为什么这样可行?
y中的每个元素y[i],代表原始向量x中第y[i]个位置的元素,对应排序后向量z的第i个元素。当我们执行x_restored[y] <- z时,R会自动把z[1]放到x_restored的第y[1]位,z[2]放到第y[2]位……以此类推,完美还原了原始向量的元素分布。
内容的提问来源于stack exchange,提问作者mt1022
相关产品推荐
相关产品推荐

