R:returns 原始向量的索引

R: Index to unique vector that returns original

我有一个向量 v <- c(6,8,5,5,8),我可以使用

获取其中的唯一值
> u <- unique(v)
> u
[1] 6 8 5

现在我需要一个索引 i = [2,3,1,1,3],当索引到 u 时 returns 原始向量 v

> u[i]
[1] 6,8,5,5,8

我知道这样的索引可以在 Matlab 中自动生成,the ci index,但似乎不是 R 中标准指令集的一部分。有人知道可以执行此操作的函数吗?

背景是我有几个带有匿名ID的长字符串向量:

ids
"PTefkd43fmkl28en==3rnl4"
"cmdREW3rFDS32fDSdd;32FF"
"PTefkd43fmkl28en==3rnl4"
"PTefkd43fmkl28en==3rnl4"
"cmdREW3rFDS32fDSdd;32FF"

为了减少文件大小和简化代码,我想将它们转换成整数类型

ids
1
2
1
1
2

并发现唯一向量的索引就是这样做的。由于有很多行,我犹豫要不要编写一个循环遍历唯一向量的每个元素的函数,并想知道是否有更有效的方法——或者完全不同的方法来将字符串转换为匹配的整数。

试试 match

 df1$ids <- with(df1, match(ids, unique(ids)) )
 df1$ids
 #[1] 1 2 1 1 2

或者我们可以转换为 factor 并强制转换为 numeric

 with(df1,as.integer(factor(ids, levels=unique(ids))))
 #[1] 1 2 1 1 2

使用 uv。根据 OP post 中 'u' 的输出,它一定是 sorted

 u <- sort(unique(v))
 match(v, u)
 #[1] 2 3 1 1 3

或使用findInterval。确保 'u' 已排序。

 findInterval(v,u)
 #[1] 2 3 1 1 3