Как мне сопоставить США-государства только по именам? В 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")
Примечание. Некоторые состояния не выделены цветом, потому что у меня нет вашего полного набора данных.