使用CSV导入空间数据

3

我正在尝试将CDC/HHS医院紧张情况数据转化为空间数据,可以从以下链接下载:

https://healthdata.gov/Hospital/COVID-19-Reported-Patient-Impact-and-Hospital-Capa/anag-cw7u

这是部分数据的示例:

hospital_name             hospital_pk   geocoded_hospital_address
TRIHEALTH EVENDALE HOSPITAL 360362      POINT (-84.420098 39.253934)
KANE COUNTY HOSPITAL        461309      POINT (-112.52859 37.054324)
CRAIG HOSPITAL              062011      POINT (-104.978247 39.654008)

对于入口:

structure(list(hospital_name = c("TRIHEALTH EVENDALE HOSPITAL", 
"KANE COUNTY HOSPITAL", "CRAIG HOSPITAL", "JAY HOSPITAL", "HARRISON COUNTY COMMUNITY HOSPITAL"
), geocoded_hospital_address = c("POINT (-84.420098 39.253934)", 
"POINT (-112.52859 37.054324)", "POINT (-104.978247 39.654008)", 
"POINT (-87.151673 30.950024)", "POINT (-94.025425 40.26528)"
)), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame"
))

我试图将其作为CSV导入,进行转换,然后将其转换为shapefile格式。该文件有一个字段称为geocoded_hospital_address,我尝试使用它来转换数据集。它以POINT(longitude, latitude)格式存储,例如"POINT(-100.01382, 37.441504)"。我通常使用coords选项下的两个变量(经度/纬度),但是我无法使“sf_column_name”选项起作用,也无法将该字段分解为两个部分。
test_sf<-COVID_19_Reported_Patient_Impact_and_Hospital_Capacity_by_Facility%>%
+   st_as_sf(sf_column_name="geocoded_hospital_address", crs=4326)
Error in st_sf(x, ..., agr = agr, sf_column_name = sf_column_name) : 
  no simple features geometry column present

有什么想法吗?


1
你能提供一个小的示例数据集吗?用户可能不想下载674K行来回答一个问题。 - neilfws
1
不要使用 sf_column_name,试试 wktCOVID_19_Reported_Patient_Impact_and_Hospital_Capacity_by_Facility %>% st_as_sf(wkt = "geocoded_hospital_address", crs=4326) - John Polo
@JohnPolo 我收到错误信息:CPL_sfc_from_wkt(x) 中的错误:OGR 错误 - josephn
@neilfws:我添加了一小段数据片段。 - josephn
sf::st_as_sf(df, wkt = "geocoded_hospital_address") 对我来说是可行的(其中我将您的对象命名为 df,而不是您使用的那个长名称) - SymbolixAU
显示剩余4条评论
2个回答

3

我认为问题在于geocoded_hospital_address中存在NA。去除它们可以解决你的问题。

library(sf)
df_0 <- COVID_19_Reported_Patient_Impact_and_Hospital_Capacity_by_Facility %>% 
    filter(!is.na(geocoded_hospital_address))
test_sf = st_as_sf(df_0,crs=4326, wkt = "geocoded_hospital_address")

1

这个解决方案很荒谬,但由于shapefile无法下载,这是我能提供的最好的解决方案。


library(tidyverse)
library(sf)

x <- read_csv('COVID-19_Reported_Patient_Impact_and_Hospital_Capacity_by_Facility.csv')

# alter geometry column to get just coordinates
#  remove 'POINT', parentheses, and whitespace
x$coords <- x$geocoded_hospital_address %>%
  str_remove('POINT') %>%
  str_remove('\\(') %>%
  str_remove('\\)') %>%
  str_trim()

# remove NA coords, then separate 'coords' into x & y, transform to an 'sf' object

x_sf <- x %>%
  filter(!is.na(coords)) %>%
  separate(coords, into = c('x','y'), sep = ' ') %>%
  st_as_sf(coords = c('x','y'))

head(x_sf)

#> Simple feature collection with 6 features and 128 fields
#> Geometry type: POINT
#> Dimension:     XY
#> Bounding box:  xmin: -108.616 ymin: 24.71104 xmax: -80.21099 ymax: 39.10636
#> CRS:           NA
#> # A tibble: 6 × 129
#>   hospital_pk collecti…¹ state ccn   hospi…² address city  zip   hospi…³ fips_…⁴
#>   <chr>       <date>     <chr> <chr> <chr>   <chr>   <chr> <chr> <chr>   <chr>  
#> 1 060054      2020-06-05 CO    0600… COMMUN… 2351 '… GRAN… 81505 Short … 08077  
#> 2 100156      2020-06-19 FL    1001… HCA FL… 340 NW… LAKE… 32055 Short … 12023  
#> 3 101312      2020-05-15 FL    1013… FISHER… 3301 O… MARA… 33050 Critic… 12087  
#> 4 102001      2020-06-12 FL    1020… SELECT… 955 NW… MIAMI 33128 Long T… 12086  
#> 5 102013      2020-06-26 FL    1020… KINDRE… 4801 N… TAMPA 33603 Long T… 12057  
#> 6 102028      2020-05-01 FL    1020… SELECT… 5050 C… OXFO… 34484 Long T… 12119  
#> # … with 119 more variables: is_metro_micro <lgl>, total_beds_7_day_avg <dbl>,
#> #   all_adult_hospital_beds_7_day_avg <dbl>,
#> #   all_adult_hospital_inpatient_beds_7_day_avg <dbl>,
#> #   inpatient_beds_used_7_day_avg <dbl>,
#> #   all_adult_hospital_inpatient_bed_occupied_7_day_avg <dbl>,
#> #   inpatient_beds_used_covid_7_day_avg <dbl>,
#> #   total_adult_patients_hospitalized_confirmed_and_suspected_covid_7_day_avg <dbl>, …


1
sf 可以直接读取 well-known-text (WKT),因此我认为您不需要手动更改 POINT() 的值。(我怀疑 @Zhiqiang 在这里有正确的解决方案) - SymbolixAU
它比@zhiqiang的解决方案稍微长一些,但实际上对于我的数据集中的其他问题仍然有用,因此仍然受到赞赏! - josephn
1
@SymbolixAU - 谢谢,我学到了新东西。我同意我的解决方案远不如其他人的好,但它很有趣,似乎也能工作,尽管我不建议使用它。祝你好运,josephn! - mrhellmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接