Как мне сопоставить нас-государства только по именам? В R - PullRequest
1 голос
/ 19 марта 2020

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

head(map)

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

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

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

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

library(dplyr)

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

и выскочило это сообщение об ошибке:

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

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

1 Ответ

1 голос
/ 19 марта 2020

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

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")

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

...