#r #merge #project #missing-data #sf
Вопрос:
У меня есть фрейм данных (называемый v1), который содержит более 4000 наблюдений за недвижимостью в Мадриде, Испания, с 10 переменными (цена, площадь и т. Д.). Он также имеет переменные долготы и широты (числовые переменные). Я преобразовал такой фрейм данных в пространственный фрейм (называемый v1.espacial), используя st_as_sf
функцию и установив crs как 25830. Почему я выбрал 25830 в качестве системы координат? потому что это то же самое, что шейп-файл, с которым я хочу объединить эти данные.
У меня есть шейп-файл (называемый shape), в котором отображаются округа Мадрида. Я хотел объединить оба пространственных кадра с помощью st_join
функции, но при этом форма полностью меняется (отсутствуют значения). Кто-нибудь может мне помочь, пожалуйста?
Непрост. данные (v1)
gt; class(v1) [1] "data.frame" gt; str(v1) 'data.frame': 4087 obs. of 10 variables: $ id : num 1.53e 08 1.55e 08 1.45e 08 1.57e 08 1.57e 08 ... $ coordinates.latitude : num 40.5 40.4 40.4 40.5 40.3 ... $ coordinates.longitude: num -3.47 -3.66 -3.69 -3.87 -3.78 ... $ location : chr "Constituciu00F3n, 90, Torreju00F3n de Ardoz" "Madrid Capital" "Madrid Capital" "Las Rozas de Madrid" ... $ description : chr "GARSIERRA. Local muy amplio con 1 bau00F1o. Situado en la segunda planta del centro comercial El Cu00EDrculo, a"| __truncated__ " PISO vende excelente local comercial A PIE DE CALLE.rnrnPropiedad de uso comercial con dos amplias estancias q"| __truncated__ "Local oficina en 2 plantas de 300 meytros cada una, luminoso, 4 bau00F1os, buena finca, excelente zona y muy bien comunicado." "en exclusiva local comercial de 37 m2 a la venta en las Rozas (Madrid). Se encuentra en el centro de la poblaci"| __truncated__ ... $ rawPrice : num 120343 123000 2500000 93500 481219 ... $ subtypeId : num 0 0 0 0 0 0 0 0 0 0 ... $ conservationState : num 2 3 4 NA NA NA NA NA NA NA ... $ surface : num 119 81 700 37 153 151 95 444 766 54 ... $ floor : num 7 5 3 NA NA NA NA NA NA NA ...
Шейп-файл (скачан с сайта правительства Испании)
gt; class(shape) [1] "sf" "data.frame" summary(shape) COD_DIS COD_DIS_TX NOMBRE DISTRI_MAY DISTRI_MT Length:21 Length:21 Length:21 Length:21 Length:21 Class :character Class :character Class :character Class :character Class :character Mode :character Mode :character Mode :character Mode :character Mode :character Area_m2 geometry Min. : 4679185 POLYGON :21 1st Qu.: 6103168 epsg:25830 : 0 Median : 14048316 proj=utm ...: 0 Mean : 28783577 3rd Qu.: 27626096 Max. :237838370
Преобразование v1 в пространственные данные
v1.espaciallt;-st_as_sf(v1,coords=c("coordinates.longitude","coordinates.latitude"), crs=25830)
Объединение обоих объектов
v1.espaciallt;-st_join(v1.espacial, shape)
ПРОБЛЕМА Все значения из фигуры отсутствуют
str(v1.espacial) Classes ‘sf’ and 'data.frame': 4087 obs. of 15 variables: $ id : num 1.53e 08 1.55e 08 1.45e 08 1.57e 08 1.57e 08 ... $ location : chr "Constituciu00F3n, 90, Torreju00F3n de Ardoz" "Madrid Capital" "Madrid Capital" "Las Rozas de Madrid" ... $ description : chr "GARSIERRA. Local muy amplio con 1 bau00F1o. Situado en la segunda planta del centro comercial El Cu00EDrculo, a"| __truncated__ " PISO vende excelente local comercial A PIE DE CALLE.rnrnPropiedad de uso comercial con dos amplias estancias q"| __truncated__ "Local oficina en 2 plantas de 300 meytros cada una, luminoso, 4 bau00F1os, buena finca, excelente zona y muy bien comunicado." "en exclusiva local comercial de 37 m2 a la venta en las Rozas (Madrid). Se encuentra en el centro de la poblaci"| __truncated__ ... $ rawPrice : num 120343 123000 2500000 93500 481219 ... $ subtypeId : num 0 0 0 0 0 0 0 0 0 0 ... $ conservationState: num 2 3 4 NA NA NA NA NA NA NA ... $ surface : num 119 81 700 37 153 151 95 444 766 54 ... $ floor : num 7 5 3 NA NA NA NA NA NA NA ... $ COD_DIS : chr NA NA NA NA ... $ COD_DIS_TX : chr NA NA NA NA ... $ NOMBRE : chr NA NA NA NA ... $ DISTRI_MAY : chr NA NA NA NA ... $ DISTRI_MT : chr NA NA NA NA ... $ Area_m2 : num NA NA NA NA NA NA NA NA NA NA ... $ geometry :sfc_POINT of length 4087; first list element: 'XY' num -3.47 40.46 - attr(*, "sf_column")= chr "geometry" - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA NA NA NA NA NA ... ..- attr(*, "names")= chr [1:14] "id" "location" "description" "rawPrice" ...
Комментарии:
1. скорее всего, вы ввели данные в EPSG:4326 (десятичные градусы) и объявили, что они указаны в единицах EPSG:25830 (метры). Что вам нужно сделать, это сначала запустить st_as_sf с EPSG 4326, а затем — в качестве второго шага — преобразовать их в
sf::st_transform()
EPSG:25830. Вы также можете найтиmapview::mapview()
полезным при отладке2. Большое спасибо @JindraLacko, так лучше, отсутствует только 50% данных. Я буду продолжать пытаться это исправить.