ОЧЕНЬ благодарна за помощь!!!
У меня есть очень грязные данные, которые я пытаюсь очистить. Ищете элегантное решение в R, которое будет правильно определять, есть ли зарубежные поездки или нет (ИСТИНА = зарубежные поездки, ЛОЖЬ = внутренние поездки/поездки в США).
Есть несколько проблем с данными, в том числе: - штаты представлены как в сокращенном, так и в не сокращенном формате - опечатки - разные форматы (например, просто штат, город с запятой, город с косой чертой и т. д.) - данные в разделе штат/страна могут содержать город, а не штат/страна и наоборот для столбца города.
В столбце «Поездки за границу» решение должно быть перезаписано таким образом, чтобы, если в столбце «штат/страна» или «город» были указаны поездки за границу, оно было бы закодировано как ИСТИНА, в противном случае — ЛОЖЬ.
`State/Country` `Foreign Travel` City
<chr> <lgl> <chr>
1 CA FALSE San Francisco
2 California FALSE San Francisco
3 British Columbia, Canada TRUE Vancouver
4 Florida NA Hollywood
5 TX NA Dallas
6 Florda NA Orlando
7 FL/CA NA Orlando, Sacramennto
8 bufalo NA NY
9 d.c FALSE washington dc
10 frt wort, tx FALSE texass
11 frt wort, tx FALSE texass
12 japan NA japan
13 W?rzburg FALSE german
Прямо сейчас у меня есть какой-то очень неаккуратный код, который просматривает каждый столбец, выдает true/false, если находит его, если true (найден внутренний элемент), по крайней мере, для 1 столбца, он перекодирует иностранный столбец t/f в False (нет иностранного путешествовать):
##add some lines for nas
no_entry <- c("na",".","","n/a","none")
##Maps package
cities<- world.cities
USAcities <- cities %>%
filter(country.etc == 'USA')
USAcities <- c(USAcities, 'williamsburg')
USAcities <-tolower(USAcities$name)
USA_fullState<- tolower(USA_fullState)
USA_stateABR<- tolower(USA_stateABR)
Travel_df_limited$State.Country<- tolower(Travel_df_limited$State.Country)
Travel_df_limited$ForeignTravel_rc1 <-
c(rep(0,length(Travel_df_limited$Foreign.Travel)))
i<-1
for (i in 1:length(USA_fullState)){
Travel_df_limited <- Travel_df_limited %>%
mutate(ForeignTravel_rc1 =
ifelse(grepl(USA_fullState[i],Travel_df_limited$State.Country) ==
"TRUE","FALSE",Travel_df_limited$ForeignTravel_rc1 ))
i<- i+1}
Travel_df_limited$ForeignTravel_rc1
Travel_df_limited <- Travel_df_limited %>%
mutate(ForeignTravel_rc2 = ifelse(Travel_df_limited$State.Country%in%
USA_stateABR== "TRUE","FALSE","TRUE"))
Travel_df_limited$ForeignTravel_rc3 <-
c(rep(0,length(Travel_df_limited$Foreign.Travel)))
i<-1
for (i in 1:length(USAcities)){
Travel_df_limited <- Travel_df_limited %>%
mutate(ForeignTravel_rc3 =
ifelse(grepl(USAcities[i],Travel_df_limited$State.Country) ==
"TRUE","FALSE",Travel_df_limited$ForeignTravel_rc3))
i<- i+1}
Travel_df_limited <- Travel_df_limited %>%
mutate(ForeignTravel_rc = ifelse(Travel_df_limited$ForeignTravel_rc1 ==
"FALSE" | Travel_df_limited$ForeignTravel_rc2 == "FALSE"|
Travel_df_limited$ForeignTravel_rc3 ==
"FALSE" , "FALSE",
ifelse(Travel_df_limited$State.Country%in%
c("na",".","","n/a","none") =="TRUE","FALSE", "TRUE")))
Travel_df_limited<- subset(Travel_df_limited, select = -
c(ForeignTravel_rc1,ForeignTravel_rc2,ForeignTravel_rc3))