2017-12-05 4 views
-1

https://data.sfgov.org/Transportation/Bike-Share-Stations/gtyg-jpkjKonvertieren von Geometrie zu Länge/Breite-Koordinaten in R

ich mit diesem Datensatz arbeite, und frage mich, ob ich Geometrie (Geom in der Tabelle) umwandeln konnte auf zwei Säulen: Länge und Breite in R.

Vielen Dank!

+1

Geben Sie bitte alle relevanten Informationen in Ihrer Frage. Ziehen Sie ein paar Zeilen der Quelle an und zeigen Sie, was Sie bisher versucht haben. Auch die Antwort auf Ihre Frage ist ja. Entferne Grad, konvertiere zu numerisch und voila. –

Antwort

0

Ja ist es. Der einfachste Weg ist wahrscheinlich das tidyr Paket zu verwenden. Hier ist der Einzeiler:

library(tidyr) 
df <- fread("~/Downloads/Bike_Share_Stations.csv") # Read data 

extract(df, Geom, into = c('Lat', 'Lon'), '\\((.*),(.*)\\)', conv = T) 

Das letzte Argument ist ein regulärer Ausdruck mit Gruppenübereinstimmungen. Es ist ein einfaches Muster: Es beginnt mit einem Literal (. Die innersten zwei Klammern (.*) sind die zwei Koordinaten, die durch das Komma getrennt sind. Nur diese werden extrahiert. Das Muster endet mit dem entsprechenden Literal ).

Hier ist eine Teilmenge der resultierenden Daten:

 UID Site ID    Last Edited Date   Lat    Lon 
    1: 1 SF-T24 S1 05/23/2016 12:00:00 AM +0000 37.7518243814 -122.426627114 
    2: 2 SF-G33 S1 05/23/2016 12:00:00 AM +0000 37.7935049482 -122.392846514 
    3: 3 SOMA-06A 05/23/2016 12:00:00 AM +0000 37.7897420277 -122.394678441 
    4: 4 SF-T22 S5 05/23/2016 12:00:00 AM +0000 37.7512809413 -122.431836215 
    5: 5 SF-R25 S4 05/23/2016 12:00:00 AM +0000 37.7567132725 -122.421038213 
---                   
103: 103  Embr-E 05/23/2016 12:00:00 AM +0000 37.8047749378 -122.403247294 
104: 104 SF-N26 S1 05/23/2016 12:00:00 AM +0000 37.7682271629 -122.420291015 
105: 105 Market-11B 05/23/2016 12:00:00 AM +0000 37.7922638478 -122.397066071 
106: 106 SF-O27 S2 05/23/2016 12:00:00 AM +0000 37.7671609432 -122.415485214 
107: 107 SF-T23 S5 05/23/2016 12:00:00 AM +0000 37.7514609421 -122.429135213 
0

Ich denke, die Geom Spalte bereits die Breite/Länge enthält.

library(tidyverse) 

df <- df %>% 
    mutate(Geom = gsub('[()°]', '', Geom)) %>% 
    separate(col = Geom, into = c('Latitude', 'Longitude '), sep = '\\,') 

Zuerst entfernen wir die Klammern und Gradsymbol mit gsub('[()°]', '', geom) und ersetzen Sie die Geom Spalte. Wir dann separate die Geom Spalte in neue Latitude und Longitude Spalten mit einem Komma-Trennzeichen sep = '\\,'.

0

RSocrata::read.socrata und tidyr::extract machen diese prägnante:

library(tidyverse) 

df <- RSocrata::read.socrata('https://data.sfgov.org/Transportation/Bike-Share-Stations/gtyg-jpkj') 

df <- df %>% extract(Geom, c('lat', 'lon'), '\\((.*), (.*)\\)', convert = TRUE) 

# print nicely 
df %>% select(UID, Site.ID, lat, lon) %>% as_data_frame() 
#> # A tibble: 107 x 4 
#>  UID Site.ID  lat  lon 
#> * <int>  <chr> <dbl>  <dbl> 
#> 1  1 SF-T24 S1 37.75182 -122.4266 
#> 2  2 SF-G33 S1 37.79350 -122.3928 
#> 3  3 SOMA-06A 37.78974 -122.3947 
#> 4  4 SF-T22 S5 37.75128 -122.4318 
#> 5  5 SF-R25 S4 37.75671 -122.4210 
#> 6  6 NOMA-2E 37.79861 -122.4008 
#> 7  7 SF-L33 S4 37.77590 -122.3932 
#> 8  8 SF-O24 S4 37.76623 -122.4269 
#> 9  9 Market-03B 37.78099 -122.4117 
#> 10 10 SF-O28 S2 37.76723 -122.4108 
#> # ... with 97 more rows 
Verwandte Themen