订购和排序矢量

时间:2014-06-16 21:19:03

标签: r sorting

我有一个算法,它接收数据,对其进行排序,分析,然后返回排序数据的分数。但是,分数对应于排序数据,我真的想返回与未排序数据相对应的分数。我认为必须有一些默认的R函数来做到这一点,但我找不到任何运气。这是一个MWE,我编写的代码有效,但速度很慢:

orig = rnorm(10)
ord = order(orig)
new = orig[ord]
reprod = sapply(1:length(orig), function(x)new[which(ord==x)] )
all(reprod==orig)

有没有办法更有效地“取消排序”数据?

2 个答案:

答案 0 :(得分:1)

只是:

orig = rnorm(100000)
ord = order(orig)
new = orig[ord]
reprod = rep(0,length(new))
reprod[ord] = new

答案 1 :(得分:0)

关于排序向量(order函数的结果)的一个好处是,如果你对结果运行order它会给你反向排序,换句话说它会告诉你如何取消排序。以下是我认为您尝试以简单方式做的一个简单示例

> orig <- rnorm(10)
> ord <- order(orig)
> score <- seq_along(orig)
> cbind(orig, score[ order(ord) ])
               orig   
 [1,] -0.2429266384  4
 [2,]  0.6346488818  8
 [3,]  1.2956779160  9
 [4,] -0.5563531517  3
 [5,]  1.3299626650 10
 [6,] -1.6062497717  1
 [7,] -1.1444093167  2
 [8,] -0.0004719915  5
 [9,]  0.2734227278  7
[10,]  0.0357991850  6

您还可以执行以下操作:

new[ order(ord) ]

看到它将已排序的数据返回到原始订单。