1

我以为这会很容易,但结果却非常困难。这是一个简单的问题:我有一个名称向量:

[1] David    David    David    Nathan   Holly    Holly    Holly    Holly   
[9] Holly    Sue      Sue      Sue      Sue      Sue      Rene     Michelle
[17] Michelle Michelle Jennie   Jennie   Jennie   Jennie  

我想制作一个索引向量,以便每个名称都获得相同的索引:

[1] 1 1 1 2 3 3 3 3 3 4 4 4 4 4 5 6 6 6 7 7 7 7

我得到了每个名字的号码

bar <- ddply(df, .(Rater.Name), summarize, rater.n=sum(!is.na(Rater.Name)))

我试过了

lapply(bar$Rater.Name, rep(1:7, bar$rater.n))

以及其他各种东西,例如outer(),by()等。没有奏效。我最终使用了一个笨拙的 for 循环,但似乎应该有一个更像“R-like”的方式来做到这一点。任何人都可以提出一种方法吗?

4

3 回答 3

2

您正在寻找factor

as.numeric(factor(x))

# [1] 1 1 1 5 2 2 2 2 2 7 7 7 7 7 6 4 4 4 3 3 3 3

这个默认按字母顺序排列。如果您不希望这样做(例如:2而不是5for Nathan...),请执行以下操作:

as.numeric(factor(x, levels=x[!duplicated(x)]))
# [1] 1 1 1 2 3 3 3 3 3 4 4 4 4 4 5 6 6 6 7 7 7 7
于 2013-02-26T22:56:37.600 回答
2

关于 using ,我没有什么特别负面的说法factor,但是您可以通过查看以下内容来学习一个额外的技巧和一个非常有用的功能match

> dat <- scan(what="")
1:  David    David    David    Nathan   Holly    Holly    Holly    Holly   
9:  Holly    Sue      Sue      Sue      Sue      Sue      Rene     Michelle
17:  Michelle Michelle Jennie   Jennie   Jennie   Jennie  
23: 
Read 22 items
> match(dat, unique(dat))
 [1] 1 1 1 2 3 3 3 3 3 4 4 4 4 4 5 6 6 6 7 7 7 7
于 2013-02-27T02:08:53.590 回答
0

这是首先将其转换为因子的技巧:

> x <- c('David', 'David', 'Lena', 'David')
> as.factor(x)
[1] David David Lena  David
Levels: David Lena
> y <- as.factor(x)
> y
[1] David David Lena  David
Levels: David Lena
> as.numeric(y)
[1] 1 1 2 1
于 2013-02-26T22:59:09.920 回答