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 に似た」方法があるはずです。誰でも方法を提案できますか?

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

これは、デフォルトでアルファベット順に並べられます。それを望まない場合 (例: for ...2の代わりに)、次のようにします。5Nathan

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

を使用することについて特に否定的なことは何もありませんが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 に答える