假设我有一个向量
test<-c("a","b","c","d","e")
我正在使用另一个索引向量来更改顺序(这是必不可少的):
sortvect<-c(2,3,5,4,1)
test2<-test[sortvect]
之后我在test2
上执行了一些操作,之后我想切换回初始订单,sortvect
:
test<-give_my_order_back(test2,sortvect)
我尝试了test2[sortvect]
和test2[rev(sortvect)]
,但解决方案明显不同。
答案 0 :(得分:6)
这并不困难。 match(test, test2)
将为您提供重新排序的索引。
test <- c("a","b","c","d","e")
sortvect <- c(2,3,5,4,1)
test2 <- test[sortvect]
sortback <- match(test, test2)
test2[sortback]
# [1] "a" "b" "c" "d" "e"
答案 1 :(得分:5)
或者order
也可以非常简单地执行此操作
test2[order(sortvect)]
# [1] "a" "b" "c" "d" "e"
答案 2 :(得分:2)
答案 3 :(得分:0)
您可以使用rank()计算逆排列,而不是 sort(sort(x))。相同的计算。
> test[order(sortvect)][rank(sortvect)]
[1] "a" "b" "c" "d" "e"
通常具有以下身份:
set.seed(0)
x<-matrix(rnorm(100),1)
all(order(order(x))==rank(x))
all(x==x[order(x)][rank(x)])