Ostatnim problemem związanym z czyszczeniem danych, który musimy wziąć pod uwagę, są wpisy spełniające formularz „Miasto, stan”, ale nie pochodzą ze Stanów Zjednoczonych. W szczególności dane obejmują kilka obserwacji UFO z Kanady, które również przyjmują tę formę. Na szczęście żaden ze skrótów prowincji kanadyjskiej nie pasuje do skrótów państwowych w USA. Możemy wykorzystać te informacje do zidentyfikowania pozycji spoza USA, konstruując wektor skrótów stanów USA i zachowując tylko te wpisy w kolumnie USState, które pasują do wpisu w tym wektorze:
us.states<-c(“ak”,”al”,”ar”,”az”,”ca”,”co”,”ct”,”de”,”fl”,”ga”,”hi”,”ia”,”id”,”il”,
“in”,”ks”,”ky”,”la”,”ma”,”md”,”me”,”mi”,”mn”,”mo”,”ms”,”mt”,”nc”,”nd”,”ne”,”nh”,
“nj”,”nm”,”nv”,”ny”,”oh”,”ok”,”or”,”pa”,”ri”,”sc”,”sd”,”tn”,”tx”,”ut”,”va”,”vt”,
“wa”,”wi”,”wv”,”wy”)
ufo$USState<-us.states[match(ufo$USState,us.states)]
ufo$USCity[is.na(ufo$USState)]<-NA
Aby znaleźć wpisy w kolumnie USState, które nie pasują do skrótu stanu USA, używamy funkcji dopasowania. Ta funkcja przyjmuje dwa argumenty: po pierwsze, wartości, które należy dopasować, a po drugie, wartości, które należy dopasować. Funkcja zwraca wektor o tej samej długości co pierwszy argument, w którym wartości są indeksem wpisów w tym wektorze, które pasują do pewnej wartości w drugim wektorze. Jeśli nie zostanie znalezione dopasowanie, funkcja domyślnie zwraca NA. W naszym przypadku interesuje nas tylko to, które wpisy są NA, ponieważ są to wpisy, które nie pasują do stanu USA. Następnie używamy funkcji is.na, aby znaleźć, które wpisy nie są stanami USA i resetujemy je do NA w kolumnie USState. Na koniec ustawiliśmy również te wskaźniki w kolumnie USCity na NA w celu zachowania spójności. Nasza oryginalna ramka danych została teraz zmanipulowana do tego stopnia, że możemy z niej wydobyć tylko te dane, którymi jesteśmy zainteresowani. W szczególności chcemy podzbioru, który obejmuje tylko amerykańskie incydenty obserwacji UFO. Zastępując wpisy, które nie spełniały tych kryteriów w poprzednich krokach, możemy użyć polecenia podzestawu, aby utworzyć nową ramkę danych obejmującą tylko incydenty w USA:
ufo.us<-subset(ufo, !is.na(USState))
head(ufo.us)
DateOccurred DateReported Location ShortDescription Duration
1 1995-10-09 1995-10-09 Iowa City, IA <NA> <NA>
2 1995-10-10 1995-10-11 Milwaukee, WI <NA> 2 min.
3 1995-01-01 1995-01-03 Shelton, WA <NA> <NA>
4 1995-05-10 1995-05-10 Columbia, MO <NA> 2 min.
5 1995-06-11 1995-06-14 Seattle, WA <NA> <NA>
6 1995-10-25 1995-10-24 Brunswick County, ND <NA> 30 min.
LongDescription USCity USState
1 Man repts. witnessing “flash… Iowa City ia
2 Man on Hwy 43 SW of Milwauk… Milwaukee wi
3 Telephoned Report:CA woman v… Shelton wa
4 Man repts. son’s bizarre sig… Columbia mo
5 Anonymous caller repts. sigh… Seattle wa
6 Sheriff’s office calls to re… Brunswick County nd