comment ajouter des colonnes à un SpatialLinesDataFrame ?
Bonjour,
Mon script génère un fichier SpatialLinesDataFrame que j'exporte en shp pour l'utiliser sous un logiciel de carto nommé Qgis.
Avant cet export, je voudrai ajouter des colonnes (EPCi et SCOT) à "la partie DataFrame" du "SpatialLinesDataFrame" à partir d'une jointure (sur coma) avec un Dataframe distinct.
Avez-vous une idée de la commande à utiliser? :
ps: ci-dessous la structure de mes deux fichiers:
la structure du SpatialLinesDataFrame:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Formal class 'SpatialLinesDataFrame' [package "sp"] with 4 slots
..@ data :'data.frame': 706 obs. of 8 variables:
.. ..$ coma : Factor w/ 36554 levels "01001","01002",..: 45 237 1611 1611 1644 1651 1682 1685 1716 1724 ...
.. ..$ xa : num [1:706] 857394 856606 959030 959030 924476 ...
.. ..$ ya : num [1:706] 6529239 6534407 6337689 6337689 6307982 ...
.. ..$ comb : Factor w/ 36554 levels "01001","01002",..: 33991 33959 33959 33991 33995 33995 34030 33991 33959 33995 ...
.. ..$ xb : num [1:706] 980706 979263 979263 980706 989466 ...
.. ..$ yb : num [1:706] 6288088 6276870 6276870 6288088 6269837 ...
.. ..$ entrant_net$n: num [1:706] 3.93 5.02 12.32 0.98 4 ...
.. ..$ rows : chr [1:706] "561" "14941" "11639" "11639.1" ...
..@ lines :List of 706
.. ..$ :Formal class 'Lines' [package "sp"] with 2 slots
.. .. .. ..@ Lines:List of 1
.. .. .. .. ..$ :Formal class 'Line' [package "sp"] with 1 slot
... |
la structure du dataframe :
Code:
1 2 3 4 5 6 7 8 9 10 11
| 'data.frame': 706 obs. of 9 variables:
$ coma : chr "01049" "01262" "04070" "04070" ...
$ liba : chr "La Boisse" "Montluel" "Digne-les-Bains" "Digne-les-Bains" ...
$ comb : chr "83082" "83050" "83050" "83082" ...
$ libb : chr "Montferrat" "Draguignan" "Draguignan" "Montferrat" ...
$ n : num 3.93 5.02 12.32 0.98 4 ...
$ Nom_com : chr NA NA NA NA ...
$ libSCOT : chr NA NA NA NA ...
$ libEPCI : chr NA NA NA NA ...
$ PTU_2014_VAR_2015: chr NA NA NA NA ...
.... |
Merci
fcka
Comment ajouter des colonnes à un SpatialLinesDataFrame
Bonjour,
Vous pouvez merger les deux dataframe comme ceci :
Code:
1 2 3
| sldf@data <- merge(sldf@data, df, by="coma")
# sldf : SpatialLinesDataFrame
# df : DataFrame |
A partir de l'exemple de la vignette du package sp :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| library(sp)
l1 = cbind(c(1,2,3),c(3,2,2))
l1a = cbind(l1[,1]+.05,l1[,2]+.05)
l2 = cbind(c(1,2,3),c(1,1.5,1))
Sl1 = Line(l1)
Sl1a = Line(l1a)
Sl2 = Line(l2)
S1 = Lines(list(Sl1, Sl1a), ID="a")
S2 = Lines(list(Sl2), ID="b")
Sl = SpatialLines(list(S1,S2))
df = data.frame(z = c(1,2), row.names=sapply(slot(Sl, "lines"), function(x) slot(x, "ID")))
Sldf = SpatialLinesDataFrame(Sl, data = df) |
Code:
1 2 3 4 5 6
| > str(Sldf)
Formal class 'SpatialLinesDataFrame' [package "sp"] with 4 slots
..@ data :'data.frame': 2 obs. of 1 variable:
.. ..$ z: num [1:2] 1 2
..@ lines :List of 2
... |
Code:
1 2 3 4 5 6 7 8 9 10
| df2 = data.frame(z = c(1,2), a = c(3,4), b = c(5,6))
Sldf@data = merge(Sldf@data, df2, by="z")
> str(Sldf)
Formal class 'SpatialLinesDataFrame' [package "sp"] with 4 slots
..@ data :'data.frame': 2 obs. of 3 variables:
.. ..$ z: num [1:2] 1 2
.. ..$ a: num [1:2] 3 4
.. ..$ b: num [1:2] 5 6
..@ lines :List of 2
... |
Cordialement,
comment ajouter des colonnes à un SpatialLinesDataFrame ?
merci cela fonctionne parfaitement !
ps.: dans mon cas, les variables ne portant pas le même nom, j'ai légèrement adapté le code avec l'aide sur la fonction "merge". Cela donne:
Code:
flux_sh@data = merge(flux_sh@data, code_epci, by.x = "coma", by.y = "Insee", all.x = T)
:merci:
fcka