Я пытаюсь исправить ошибки ввода почтового индекса, используя первые два префикса. В качестве воспроизводимого примера (гипотетически) предположим, что почтовые индексы начинаются с 01, 02, 03 и 04 - MA, но мои данные содержат ошибку, как показано ниже.
ma_zip <- c("01", "02", "03", "04")
df <- data.frame(zip = c("01100", "02223", "04332", "03234"),
state = c("MA", "NJ", "NY", "NY")) %>%
mutate(zip = as.character(zip),
state = as.character(state))
Я попытался исправить ошибку двумя способами. В первом (и грубой силе) подходе я исправил его один за другим и получил желаемый результат.
df_cleaned1 <- df %>%
mutate(state = replace(state, startsWith(zip, "02"), "MA"),
state = replace(state, startsWith(zip, "03"), "MA"),
state = replace(state, startsWith(zip, "04"), "MA"))
> df_cleaned1
zip state
1 01100 MA
2 02223 MA
3 04332 MA
4 03234 MA
Но это не самое смешное, поскольку мне приходится многократно копировать и вставлять. Поэтому я попробовал следующее, но это, похоже, не работает (также не выдается сообщение об ошибке).
df_cleaned2 <- df %>%
mutate(state = replace(state, startsWith(zip, paste(ma_zip, collapse="|")), "MA"))
> df_cleaned2
zip state
1 01100 MA
2 02223 NJ
3 04332 NY
4 03234 NY
Есть ли эффективный способ получения df_cleaned1
, избегая подхода грубой силы? (Не обязательно использовать функцию startWith)