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
使用 u
和 v
。根据 OP post 中 'u' 的输出,它一定是 sort
ed
u <- sort(unique(v))
match(v, u)
#[1] 2 3 1 1 3
或使用findInterval
。确保 'u' 已排序。
findInterval(v,u)
#[1] 2 3 1 1 3
我有一个向量 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
使用 u
和 v
。根据 OP post 中 'u' 的输出,它一定是 sort
ed
u <- sort(unique(v))
match(v, u)
#[1] 2 3 1 1 3
或使用findInterval
。确保 'u' 已排序。
findInterval(v,u)
#[1] 2 3 1 1 3