2016-06-01 113 views

回答

2

我们可以使用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) 
+0

真的很感谢。我稍微更新了我的问题。你可以看一下吗? –

0

另一种情况下,你可以使用length功能

1:length(unique(v1)) 
1

这可能有帮助:

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