将不连续向量压缩为从 R 中的 1 开始的连续向量



假设我有一个向量:

4 8 10 12

我想将其压缩为从 1 开始的向量,例如

1 2 3 4

如何在 R 中做到这一点?

更新:

我有两个向量:

4 6 10 7
8 6 6 2

并希望将它们转换为:

2 3 6 4
5 3 3 1

我们可以使用seq_along

v2 <- seq_along(v1)

如果存在重复的元素,并希望这些重复的元素具有相同的编号,请使用match

match(v1, unique(v1))
#[1] 1 2 3 4

factor

as.integer(factor(v1, levels = unique(v1)))
#[1] 1 2 3 4

如果重复元素不相邻并且希望为它们提供不同的值,请使用rle

inverse.rle(within.list(rle(v1), values <- seq_along(values)))
#[1] 1 2 3 4

注意:涵盖了大多数情况,因为帖子不是那么清楚。

更新

对于新的向量,我们将其连接在一起并做一个factormatch

r1 <- match(vN, unique(sort(vN)))
r1
#[1] 2 3 6 4 5 3 3 1
split(r1, rep(1:2, lengths(list(v1N, v2N))))
#$`1`
#[1] 2 3 6 4
#$`2`
#[1] 5 3 3 1

数据

v1 <- c(4, 8, 10, 12)
v1N <- c(4, 6, 10, 7)
v2N <- c(8, 6, 6, 2)
vN <- c(v1N, v2N)

这可能会有所帮助:

x1 <- c(4, 6, 10, 7)
x2 <- c(8, 6, 6, 2)
m_factors <- matrix(as.numeric(as.factor(rbind(x1,x2))),nrow=2)
y1 <- m_factors[1,]
y2 <- m_factors[2,]
> y1
#[1] 2 3 6 4
> y2
#[1] 5 3 3 1
您可以使用

length函数的另一种情况

1:length(unique(v1))

最新更新