Подтвердить что ты не робот

Название государства с аббревиатурой в R

У меня есть большой файл с переменным состоянием с полным именем состояния. Я хотел бы заменить его государственными аббревиатурами (то есть "NY" для "New York" ). Есть ли простой способ сделать это (помимо использования нескольких команд if-else)? Может быть, используется выражение "replace"? Спасибо.

4b9b3361

Ответ 1

1) grep полное имя от state.name и использовать его для индексации в state.abb:

state.abb[grep("New York", state.name)]
## [1] "NY"

2) или создайте вектор аббревиатур состояний, имена которых являются полными именами и индексами в нем, используя полное имя:

setNames(state.abb, state.name)["New York"]
## New York 
##     "NY" 

В отличие от (1), этот работает, даже если "Нью-Йорк" заменяется вектором полных имен состояний, например. setNames(state.abb, state.name)[c("New York", "Idaho")]

Ответ 2

R имеет две встроенные константы, которые могут помочь: state.abb с аббревиатурами и state.name с полными именами. Вот простой пример использования:

> x <- c("New York", "Virginia")
> state.abb[match(x,state.name)]
[1] "NY" "VA"

Ответ 3

Я обнаружил, что встроенное state.name и state.abb имеют только 50 состояний. Я получил большую таблицу (включая DC и т.д.) Из онлайн (например, эту ссылку: http://www.infoplease.com/ipa/A0110468.html) и вставлял ее в .csv файл с именем States.csv. Затем я загружаю состояния и abbr. из этого файла вместо использования встроенного. Остальное походит на @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 ) ]

Там небольшая разница между match и amatch в том, как они вычисляют расстояние от одного слова к другому. См. P25-26 здесь http://cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf