significa - Nombre del estado a la abreviatura en R
nombres y abreviaturas de los libros de la biblia (5)
Tengo un archivo grande con un estado variable que tiene el nombre de estado completo. Me gustaría reemplazarlo con las abreviaturas del estado (que es "NY" para "Nueva York"). ¿Hay una manera fácil de hacer esto (aparte de usar varios comandos if-else)? ¿Puede estar usando la declaración "reemplazar"? Gracias.
Descubrí que el estado.nombre incorporado y el estado.abb tienen solo 50 estados. Obtuve una tabla más grande (incluyendo DC, etc.) en línea (por ejemplo, este enlace: http://www.infoplease.com/ipa/A0110468.html ) y la pegué en un archivo .csv llamado States.csv. Luego cargo estados y abbr. de este archivo en lugar de usar el built-in. El resto es bastante similar a @Aniko ''s
library(dplyr)
library(stringr)
library(stringdist)
setwd()
# load data
data = c("NY", "New York", "NewYork")
data = toupper(data)
# load state name and abbr.
State.data = read.csv(''States.csv'')
State = toupper(State.data$State)
Stateabb = as.vector(State.data$Abb)
# match data with state names, misspell of 1 letter is allowed
match = amatch(data, State, maxDist=1)
data[ !is.na(match) ] = Stateabb[ na.omit( match ) ]
Hay una pequeña diferencia entre coincidencia y desigualdad en la forma en que calculan la distancia de una palabra a otra. Ver P25-26 aquí http://cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf
Publicación anterior que sé, pero quería arrojar la mía allí. Aprendí en tidyverse, así que para bien o para mal evito la base R cuando sea posible. Yo también quería uno con DC, así que primero construí el paso de peatones:
library(tidyverse)
st_crosswalk <- tibble(state = state.name) %>%
bind_cols(tibble(abb = state.abb)) %>%
bind_rows(tibble(state = "District of Columbia", abb = "DC"))
Luego me uní a mis datos:
left_join(data, st_crosswalk, by = "state")
R tiene dos constantes integradas que pueden ayudar: state.abb
con las abreviaturas y state.name
con los nombres completos. Aquí hay un ejemplo de uso simple:
> x <- c("New York", "Virginia")
> state.abb[match(x,state.name)]
[1] "NY" "VA"
También puede usar base::abbreviate
si no tiene nombres de estados de EE. UU. Esto no le dará abreviaturas de igual tamaño a menos que aumente la duración mínima.
state.name %>% base::abbreviate(minlength = 1)
1) grep
el nombre completo de state.name
y usarlo para indexar en state.abb
:
state.abb[grep("New York", state.name)]
## [1] "NY"
2) o cree un vector de abreviaturas de estado cuyos nombres son los nombres completos e indexe en él usando el nombre completo:
setNames(state.abb, state.name)["New York"]
## New York
## "NY"
A diferencia de (1), este funciona incluso si "New York" es reemplazado por un vector de nombres completos de estado, por ejemplo, setNames(state.abb, state.name)[c("New York", "Idaho")]