在R中重新编号一个简单的向量/整数/列表

时间:2013-11-22 17:18:09

标签: r sorting

我是R编程的初学者。所以也许我的问题太容易了,但我在网上找不到合适的答案。所以我希望在这里得到帮助。 我有以下矢量。

id_f<-c(52,69,78,52,99,41,69,7,34)

我想获得id,可以如下:

id<-c(4,5,6,4,7,3,5,1,2)

我希望重新编号和重新计算我原来的id_f对象。 哪个命令使这些重新放弃? 需要完成以下任务: 7 - &gt; 1,34 - &gt; 2,41 - &gt; 3,52 - &gt; 4,69 - &gt; 5,78 - &gt; 6,99 - &gt; 7。

提前多多感谢。

3 个答案:

答案 0 :(得分:8)

您可以尝试match使用sort

> match(id_f, unique(sort(id_f)))
[1] 4 5 6 4 7 3 5 1 2

答案 1 :(得分:2)

我发现这个问题很烦人,因此我的原始答案没有给你你想要的东西。这是一个为了我自己的理智而吵闹的人!虽然应该有一个比join更简单的方法来保持秩序而不需要data.frames

> myids <- data.frame(id_f = c(52,69,78,52,99,41,69,7,34))
> id.hold <- data.frame( id_f = unique(id_f), ranks = rank(unique(id_f)) )
> library(plyr)
> join(myids, id.hold)[,2]
Joining by: id_f
[1] 4 5 6 4 7 3 5 1 2

答案 2 :(得分:1)

这可能是一种矫枉过正,但是哦,好吧:

library(data.table)

data.table(id_f)[order(id_f), rank := .GRP, by = id_f]$rank
#[1] 4 5 6 4 7 3 5 1 2