1

n か国に属する 1000 の観測値を持つデータフレームがあります。各国には複数の観測があり、各国の観測数は異なります。(1 から n-1) までの数字を含む列を作成する必要があります。各数字は異なる国に対応しています。つまり、ダミー変数を作成していて、どの国がどの番号を持っているかは気にしません。私はそのようなダミーを作成する必要があります。私のデータはこのようなものです

  Region     x
1    be1 71615
4  be211 54288
5  be112 51158
6  it213 69856
8  it221 71412
9  uk222 79537
10 de101 94827
11 de10a 98273
12 dea10 92827
..    ..    ..

国ごとに地域の列に独自の「コード」があります。たとえば、beXXXX はベルギーに対応し、ukXXX は英国に対応します。したがって、Region 列の最初の2文字を利用してダミーを作成できると思います。ここからコマンドでジョブを実行できることがわかりgrep()ますが、リージョンの頭文字が変わるたびに 1 から n-1 に自動的に切り替えるスクリプトが必要です。

期待される出力は次のようになります

 Region     x   Dummy
1    be1 71615      1
4  be211 54288      1
5  be112 51158      1
6  it213 69856      2
8  it221 71412      2
9  uk222 79537      3
10 de101 94827      4
11 de10a 98273      4
12 dea10 92827      4
..    ..    ..     ..

この場合、1 は "be" (ベルギー) に対応し、2 は "it" (イタリア) に対応します。

4

2 に答える 2

5

因子変数を作成するのはどうですか (基になる整数コードを で表示できますas.integer)。と を使用regexecregmatchesて、変数の先頭に出現する文字コードを抽出しRegion(後で出現する文字は無視します)、それらを因子に変換します...

#  Data with an extra row (row number 11)
df <- read.table( text = "  Region     x
1    be1 71615
4  be211 54288
5  be112 51158
6  it213 69856
8  it221 71412
9  uk222 79537
11  uk222a 79537
10 de101 94827" , h = T , stringsAsFactors = FALSE )

levs <- regmatches( df$Region , regexec( "^[a-z]+" , df$Region ) )

df$Country <- as.integer( factor( levs , levels = unique(levs ) ) )

   Region     x Country
1     be1 71615       1
4   be211 54288       1
5   be112 51158       1
6   it213 69856       2
8   it221 71412       2
9   uk222 79537       3
11 uk222a 79537       3
10  de101 94827       4

unlist( regmatches( df$Region , regexec( "^[a-z]+" , df$Region ) ) )
[1] "be" "be" "be" "it" "it" "uk" "uk" "de"
于 2013-09-16T10:41:03.537 に答える