我认为这很容易,但事实证明这很难。这是一个简单的问题:我有一个名字的载体:
[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”方式来做到这一点。任何人都可以建议吗?
答案 0 :(得分: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
代替5
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
答案 1 :(得分:2)
关于使用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
答案 2 :(得分: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