簡體   English   中英

如何清除R中的字符串列(帶有大寫字母和重音符號)?

[英]How to clean string columns (with capital letters and accents) in R?

我正在使用以下數據集 ,該數據集包含墨西哥32個州中每個州的平均溫度。

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')

似乎您具有要將unique(temperature$ENTIDAD)名稱unique(temperature$ENTIDAD)的名稱更改為的替換名稱。

如果你已經有了名字,你想改變舊名稱可以使用mapvaluesplyr包更改名稱:

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

我認為這可以解決您的問題:

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

您可以設置編碼(通過fread可能更好),並使用小寫的小寫字母,

x <- temperature$ENTIDAD
Encoding(x) <- "latin1"
# might also want to convert to utf8
# x <- iconv(x,  "latin1", "UTF-8")
cbind(x, tolower(x))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM