2016-07-29 2 views
0

私はメキシコの32州の平均気温を含むdatasetという次のデータを使っています。Rの文字列(大文字とアクセント記号)を消去するにはどうすればよいですか?

library(data.table) 

# Read data from website 
col.names <- c('ENTIDAD', 'ANYO', 'ENERO', 'FEBRERO', 'MARZO', 'ABRIL', 'MAYO', 'JUNIO', 
      'JULIO', 'AGOSTO', 'SEPTIEMBRE', 'OCTUBRE', 'NOVIEMBRE', 'DICIEMBRE', 'UNIDAD') 
temperature <- fread('http://201.116.60.46/DatosAbiertos/Temperatura_promedio.csv', 
       col.names = col.names) 

列ENTIDADには、状態の名前が32あります。しかし、すべての名前は大文字で表示され、アクセントを持っていることになっている文字を置き換えるいくつかの奇妙な数字があります。

unique(temperature$ENTIDAD) 
[1] "AGUASCALIENTES"     "BAJA CALIFORNIA"     
[3] "BAJA CALIFORNIA SUR"    "CAMPECHE"      
[5] "COAHUILA DE ZARAGOZA"   "COLIMA"       
[7] "CHIAPAS"       "CHIHUAHUA"      
[9] "DISTRITO FEDERAL"    "DURANGO"       
[11] "GUANAJUATO"      "GUERRERO"      
[13] "HIDALGO"       "JALISCO"       
[15] "M\311XICO"      "MICHOAC\301N DE OCAMPO"   
[17] "MORELOS"       "NAYARIT"       
[19] "NUEVO LE\323N"     "OAXACA"       
[21] "PUEBLA"       "QUER\311TARO"     
[23] "QUINTANA ROO"     "SAN LUIS POTOS\315"    
[25] "SINALOA"       "SONORA"       
[27] "TABASCO"       "TAMAULIPAS"      
[29] "TLAXCALA"      "VERACRUZ DE IGNACIO DE LA LLAVE" 
[31] "YUCAT\301N"      "ZACATECAS" 

は、以下の文字列でこれらのそれぞれを交換するための簡単な方法はありますか?

states <- c('Aguascalientes', 
'Baja California', 
'Baja California Sur', 
'Campeche', 
'Chiapas', 
'Chihuahua', 
'Coahuila', 
'Colima', 
'DF', 
'Durango', 
'Guanajuato', 
'Guerrero', 
'Hidalgo', 
'Jalisco', 
'Michoacan', 
'Morelos', 
'Mexico', 
'Nayarit', 
'Nuevo Leon', 
'Oaxaca', 
'Puebla', 
'Queretaro', 
'Quintana Roo', 
'San Luis Potosi', 
'Sinaloa', 
'Sonora', 
'Tabasco', 
'Tamaulipas', 
'Tlaxcala', 
'Veracruz', 
'Yucatan', 
'Zacatecas') 
+0

これは、Rのデフォルトの非ASCII文字の処理に基づいて、freadの 'encoding ='パラメータを調整しようとすると、問題の読まれたように見えますか? – Nate

+0

"UTF-8"と "Latin-1"という異なるエンコードオプションを試しましたが、結果は同じです。 – jroberayalas

+1

'fread(...、encoding =" Latin-1 ")を実行すると元のアクセント付き母音の名前がそのまま残っています... – Nate

答えて

1

unique(temperature$ENTIDAD)に名前を変更する置換名があるようです。

あなたはすでにあなたがあなたに古い名前を変更したい名前が名前を変更するplyrパッケージからmapvaluesを使用することができている場合:

temperatures$ENTIDAD <- mapvalues(temperature$ENTIDAD, from=unique(temperature$ENTIDAD), to=states) 
+0

これはかなりうまく動作します。ありがとう! – jroberayalas

1

私はこれがあなたの問題を解決すると思います:

temperature <- fread('http://201.116.60.46/DatosAbiertos/Temperatura_promedio.csv', 
       col.names = col.names, encoding = "Latin-1") 
+0

私は前にこれを試しましたが、 "M XICO"、 "QUER TARO"、 "YUCAT N"などの文字列を取得しました。部分の処理方法がわかりません。 – jroberayalas

+0

私はなぜ私たちのコードが同じ出力を生成していないのだろうか – Nate

0

あなたが(fread関数を介した方がよいでしょう)エンコーディングを設定し、下部ケースのためTOLOWERを使用し、

x <- temperature$ENTIDAD 
Encoding(x) <- "latin1" 
# might also want to convert to utf8 
# x <- iconv(x, "latin1", "UTF-8") 
cbind(x, tolower(x)) 
することができます10
関連する問題