Спасибо Moody_Mudskipper за ответ, вот полное решение ...
Сначала мне нужно было импортировать список всех почтовых индексов и соответствующих им MSA;
zipmsa_mine <- read.table(file="C:/Data/ziptomsa.txt", header = TRUE, StringsAsFactors = FALSE, colClasses = c('character', 'character'))
head(zipmsa_mine)
zip msa
1 00210 Boston-Cambridge-Quincy, MA-NH
2 00211 Boston-Cambridge-Quincy, MA-NH
3 00212 Boston-Cambridge-Quincy, MA-NH
Затем я превратил полученную таблицу в именованный список:
zipmsa_mine_l <- structure(as.character(zipmsa_mine$zip), names = as.character(zipmsa_mine$msa))
#head(zipmsa_mine_l)
#Boston-Cambridge-Quincy, MA-NH Boston-Cambridge-Quincy, MA-NH
# "00210" "00211"
#Boston-Cambridge-Quincy, MA-NH Boston-Cambridge-Quincy, MA-NH
# "00212" "00213"
#Boston-Cambridge-Quincy, MA-NH Boston-Cambridge-Quincy, MA-NH
# "00214"
Таблица I, в которой я хочу создать значение MSA:
df <- read.table(h= T, strin = F, text = 'zip college
"94132" "SFSU"
"19104" "UPenn")
И, матч:
df$MSA4 <- names(zipmsa_mine_l[match(df$zip, zipmsa_mine_l)])
Который получает;
#zip college MSA
#1 94132 SFSU San Francisco-Oakland-Fremont, CA
#2 19104 UPenn Philadelphia-Camden-Wilmington, PA-NJ-DE-MD
Лучше, чем объединение или слияние? Не уверен, думаю, я мог бы провести тест. Наборы данных, над которыми я буду работать, могут содержать десятки тысяч или даже более 100 тысяч записей. И в SAS я обнаружил, что выражение put немного более эффективно, чем слияние.