Проблемы с файлами форм - PullRequest
0 голосов
/ 12 марта 2020

Я хочу сделать карту с людьми, инфицированными коронавирусом, в США. Таким образом, идея состоит в том, чтобы визуализировать карту со всеми штатами США и увидеть диапазон зараженных людей (то есть 500-2000 и т. Д. c) на всей карте. Это должно быть представлено разными оттенками одного цвета. Темные оттенки были бы состояниями с большим количеством случаев коронавируса (состояний).

Так вот мой код:

install.packages("sp")
library(sp)

install.packages("sf")
library(sf)

install.packages("maptools")
library(maptools)

install.packages("spdep")
library(spdep)
install.packages("rgdal")
     library(rgdal)
install.packages("RColorBrewer")
library(RColorBrewer)
install.packages("readxl")
library(readxl)




# 
shp_usa <- readOGR("USA_States.shp")
names(shp_usa)                              
shp_usa@data 

# 
infected <- read_excel("C:/Users/josem/OneDrive/Escritorio/infectedUS/CasesUS.xlsx") 
names(infected)      


usa_infected <- shp_usa
usa_infected <- merge(x= shp_usa@data,y= infected,by.x= "STATE_NAME",by.y="State",all.x = TRUE,sort  = FALSE)
summary(usa_infected)



# Map Cases by state USA

    spplot(usa_infected[usa_infected@Cases > 0, ],"Cases.x", at = quantile(usa_infected$Cases.x, p = c(0, .25, .5, .75, 1), na.rm = TRUE), col.regions = brewer.pal(5, "Reds"), main = expression("Cases by State"))

Но у меня есть две проблемы: 1. Я не знаю что именно написать в этой части кода: by.x =? by.y =? чтобы выполнить задание.

usa_infected <- merge(shp_usa@data,infected,by.x= "STATE_NAME",by.y="State",all.x = TRUE,sort  = FALSE)
Для визуализации карты у меня есть этот код
    spplot(usa_infected[usa_infected@Cases > 0, ],"Cases.y", at = quantile(usa_infected$Cases.y, p = c(0, .25, .5, .75, 1), na.rm = TRUE), col.regions = brewer.pal(5, "Reds"), main = expression("Cases by State"))



Но после запуска кода я получил это сообщение:

Error in `[.data.frame`(usa_infected, usa_infected@Cases > 0, ) : 


 trying to get slot "Cases" from an object (class "data.frame") that is not an S4 object 

У меня есть 2 набора данных: 1 - Это из файла shp из США.

 structure(list(STATE_NAME = structure(c(48L, 42L, 51L, 50L, 46L, 
    24L, 38L, 30L, 16L, 22L, 28L, 33L, 39L, 7L, 40L, 31L, 15L, 29L, 
    45L, 5L, 36L, 14L, 9L, 21L, 6L, 18L, 17L, 47L, 26L, 3L, 37L, 
    34L, 43L, 44L, 25L, 11L, 41L, 4L, 19L, 10L, 23L, 12L, 1L, 27L, 
    20L, 35L, 8L, 13L, 2L, 49L, 32L), .Label = c("Alabama", "Alaska", 
    "Arizona", "Arkansas", "California", "Colorado", "Connecticut", 
    "Delaware", "District of Columbia", "Florida", "Georgia", "Hawaii", 
    "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", 
    "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", 
    "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", 
    "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", 
    "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", 
    "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", 
    "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", 
    "West Virginia", "Wisconsin", "Wyoming"), class = "factor"), 
        STATE_FIPS = structure(c(48L, 42L, 51L, 50L, 46L, 24L, 38L, 
        30L, 16L, 22L, 28L, 33L, 39L, 7L, 40L, 31L, 15L, 29L, 45L, 
        5L, 36L, 14L, 9L, 21L, 6L, 18L, 17L, 47L, 26L, 3L, 37L, 34L, 
        43L, 44L, 25L, 11L, 41L, 4L, 19L, 10L, 23L, 12L, 1L, 27L, 
        20L, 35L, 8L, 13L, 2L, 49L, 32L), .Label = c("01", "02", 
        "04", "05", "06", "08", "09", "10", "11", "12", "13", "15", 
        "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", 
        "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", 
        "36", "37", "38", "39", "40", "41", "42", "44", "45", "46", 
        "47", "48", "49", "50", "51", "53", "54", "55", "56"), class = "factor"), 
        STATE_ABBR = structure(c(48L, 42L, 51L, 49L, 47L, 24L, 38L, 
        31L, 13L, 20L, 30L, 35L, 39L, 7L, 40L, 32L, 16L, 34L, 45L, 
        5L, 36L, 15L, 8L, 21L, 6L, 18L, 17L, 46L, 25L, 4L, 37L, 28L, 
        43L, 44L, 26L, 11L, 41L, 3L, 19L, 10L, 23L, 12L, 2L, 27L, 
        22L, 29L, 9L, 14L, 1L, 50L, 33L), .Label = c("AK", "AL", 
        "AR", "AZ", "CA", "CO", "CT", "DC", "DE", "FL", "GA", "HI", 
        "IA", "ID", "IL", "IN", "KS", "KY", "LA", "MA", "MD", "ME", 
        "MI", "MN", "MO", "MS", "MT", "NC", "ND", "NE", "NH", "NJ", 
        "NM", "NV", "NY", "OH", "OK", "OR", "PA", "RI", "SC", "SD", 
        "TN", "TX", "UT", "VA", "VT", "WA", "WI", "WV", "WY"), class = "factor"), 
        Cases = c(364, 8, 1, 6, 1, 5, 21, 5, 13, 95, 10, 216, 16, 
        3, 5, 15, 6, 7, 2, 157, 4, 19, 10, 9, 33, 8, 1, 9, 1, 6, 
        2, 7, 9, 21, 1, 22, 9, 1, 13, 26, 2, 2, NA, NA, NA, NA, NA, 
        NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, 
    -51L))

2 - А это база данных для зараженных:

structure(list(State = c("Arizona", "Wyoming", "Arkansas", "California", 
"Colorado", "Connecticut", "District of Columbia", "Florida", 
"Georgia", "Hawaii", "Illinois", "Indiana", "Iowa", "Kansas", 
"Kentucky", "Louisiana", "Maryland", "Massachusetts", "Michigan", 
"Minnesota", "Mississippi", "Missouri", "Nebraska", "Nevada", 
"New Hampshire", "New Jersey", "New York", "North Carolina", 
"Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", 
"South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", 
"Vermont", "Virginia", "Washington", "Wisconsin"), Cases = c(6, 
1, 1, 157, 33, 3, 10, 26, 22, 2, 19, 6, 13, 1, 8, 13, 9, 95, strong text
2, 5, 1, 1, 10, 7, 5, 15, 216, 7, 4, 2, 21, 16, 5, 9, 8, 9, 21, 
2, 1, 9, 364, 6)), row.names = c(NA, -42L), class = c("tbl_df", 
"tbl", "data.frame"))

1 Ответ

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

Итак, прежде всего, readShapeSpatial устарел и должен использовать rgdal :: readOGR или sf :: st_read.

, чтобы ответить на ваши вопросы:

1: ваше слияние будет правильным, если вы хочу назначить новые дела каждому состоянию в файле exel. (Уже есть чехлы в форме). Я предпочитаю присваивать кадрам данных имя предложения by, чтобы более четко показать, что происходит), например:

 merge(x= shp_usa@data,y =infected,by.x= "STATE_NAME",by.y="State",all.x = TRUE,sort  = FALSE)

Примечание. Дублирующиеся имена столбцов будут меняться с помощью суффикса имени ссылки, то есть Cases.x и Cases.y

2: поскольку в предупреждении говорится, что «невозможно найти унаследованный метод для данных функции« spplot »для подписи». frame "')" это означает, что он пытается построить график из фрейма шейп-файла, а не из пространственного файла. Это потому, что вы вызываете фрейм данных с помощью вызова @data (usa_infected@data), попробуйте изменить это на:

spplot(usa_infected[usa_infected$Cases.y > 0, ],"Cases.y", at = quantile(usa_infected$Cases.y, p = c(0, .25, .5, .75, 1), na.rm = TRUE), col.regions = brewer.pal(5, "Reds"), main = expression("Cases by State"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...