Как мне сопоставить США-государства только по именам? В R

В R у меня есть фрейм данных, который выглядит так:

head(map)

mapstates mapdelay 
1    Alabama      457        
2     Alaska      374       
3    Arizona     2852       
4   Arkansas      339        
5 California    11609       
6   Colorado     3298        

Я хотел бы нанести частоты на карту.

Поискав www, я нашел пакет usmap fe. Но все решения, которые я нашел, требуют данных о широте и долготе, которых у меня нет.

Используя пакет usmap и dplyr, я попытался подключить данные широты и долготы из usmap к моему фрейму данных:

library(dplyr)

newdata<- left_join(mapstates, delaymap, by= "state")

и появилось это сообщение об ошибке:

"Фелер: by не может содержать столбец соединения state чего нет в LHS Run rlang::last_error() чтобы узнать, где произошла ошибка ".

Есть ли способ построить мои данные только с названиями состояний?

1 ответ

Решение

Похоже, твой data.frame"Map" не имеет столбца с именем "состояния", поэтому команда соединения не работает. Я не могу это проверить, поскольку у меня нет точных наборов данных, которые вы используете, но это может сработать, если изменить вашу команду следующим образом:

newdata <- left_join(mapstates, delaymap, by= c("mapstates" = "state"))

Я выполнил следующий код, чтобы воспроизвести вашу идею в своей среде, и он действительно работает. Я использую "statepop"data.frame из usmapпакет для объединения ваших данных, так как он имеет fipsкод, необходимый пакету для идентификации штатов (или округов). Также см. Документацию поdata аргумент ?plot_usmap().

library(dplyr)
library(usmap)
library(ggplot2)

map_df <- tibble::tribble(
      ~"mapstates",~"mapdelay",
  "Alabama"  ,   457,
  "Alaska"  ,   374,
  "Arizona"  ,  2852,
  "Arkansas"  ,   339,
  "California"  , 11609,
  "Colorado"  ,  3298
  )

new_df <- left_join(statepop, map_df, by = c("full" = "mapstates"))

plot_usmap(data = new_df, values = "mapdelay", color = "white") + 
  scale_fill_continuous(
    low = "white", high = "red", name = "Delay", label = scales::comma
  ) + theme(legend.position = "right")

Примечание. Некоторые состояния не выделены цветом, потому что у меня нет вашего полного набора данных.

Другие вопросы по тегам