0

私はdata.frameを持っています:

head(data)
    År                        Namn N_medlemmar
1 1938  Asea-personalens erk. Csk.        8796
2 1938 Bohuslän-Hallands erk. Csk.       73765
3 1938    Dala-Gäleborgs erk. Csk.       87053
4 1938     De dövstummas erk. Csk.         718
5 1938  Eskilstuna stads erk. Csk.       15657
6 1938       Gefle stads erk. Csk.        9316

Code上記を条件とした一意の値を持つ列を追加したいName column。例:

    År                        Name N_medlemmar  Code
1 1938   Asea-personalens erk. Csk.        8796  1
2 1938  Bohuslän-Hallands erk. Csk.       73765  2
3 1939  Bohuslän-Hallands erk. Csk.       12392  2
4 1940     Dala-Gäleborgs erk. Csk.       87053  3
5 1941      De dövstummas erk. Csk.         718  4
6 1942   Eskilstuna stads erk. Csk.       15657  5
7 1943   Eskilstuna stads erk. Csk.        9316  5

したがって、Code列は上の列を条件とする一意の値ですName

dput(data)
structure(list(År = c(1938L, 1938L, 1938L, 1938L, 1938L, 1938L
), Namn = c("Asea-personalens erk. Csk.", "Bohuslän-Hallands erk. Csk.", 
"Dala-Gäleborgs erk. Csk.", "De dövstummas erk. Csk.", "Eskilstuna stads erk. Csk.", 
"Gefle stads erk. Csk."), N_medlemmar = c(8796L, 73765L, 87053L, 
718L, 15657L, 9316L)), .Names = c("År", "Namn", "N_medlemmar"
), class = "data.frame", row.names = c(NA, 6L))

試しlapplyforループしましたが、成功しませんでした...何か提案はありますか? よろしくお願いします!

4

2 に答える 2

4

あなたが求めているのは

data$Code <- as.integer(as.factor(data$Namn))

または、それを要因として保持します。

于 2013-03-22T11:08:03.110 に答える
2

または、マッチでこのようにすることもできます...

data$Code <- match( data$Namn , unique(data$Namn))

編集 -forこのapply状況について

まず、なぜこの状況でfororapplyループを使用することに熱心なのですか? ループを使用する必要がある割り当てがあるようですね。その場合は、ベクトル化されたメソッドが完全に適切な場合に使用を拒否すると答えて、追加のクレジットを取得する必要があります。奇妙な理由で本当に本当にループを使用する必要がある場合、これを実現するための多くの例の1つが次のようになります。

data$Code <- rep( NA , nrow(data) )
for( i in 1:nrow(data) ){
  data$Code[i] <- match( data$Namn[i] , unique(data$Namn))
}

これが本質的に悪い理由がわかりますか?効率が悪いだけでなく、同じ結果を得るには、より多くのタイピングとインデックス作成を行う必要があります。要するに、やらないでください!

また、(この状況では)しないことをお勧めします...

data$Code <- unlist( lapply( data[,"Namn"] , function(x){ match( x , unique(data$Namn)) } ) )

ベクトル ルークを使用します。

于 2013-03-22T11:09:10.173 に答える