Matrice de distance

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

paul villaespesa
Messages : 12
Enregistré le : 13 Avr 2018, 17:25

Matrice de distance

Messagepar paul villaespesa » 25 Avr 2018, 13:38

Bonjour à tous,
Dans mon jeu de données j'ai un point de départ de transect et un autre de fin de transect. J'aimerai connaitre la distance en mètre qui les sépare. Pour cela j'utilise la fonction distance.
J'arrive à obtenir l'information avec ce script :

Code : Tout sélectionner

library(argosfilter)
library(geosphere)
#calcule distance relle
DataSE<-Data2[Data2[,4]!="Line transect" ,]
x <- DataSE$X
y <- DataSE$Y
auxi <- combn(length(x),2)
dist1 <- apply(auxi, 2, function(u) distance(x[u[1]],x[u[2]], y[u[1]], y[u[2]]))
dist2 <- matrix(0, length(x), length(x))
dist2[t(auxi)] <- dist1
dist2
rownames(dist2)<-DataSE$IDtransect
colnames(dist2)<-DataSE$IDtransect
dist2

avec ce type de résultat:

Code : Tout sélectionner

               2018-04-12-1-1 2018-04-12-1-1 2018-04-12-1-2 2018-04-12-1-2 2018-04-12-1-3 2018-04-12-1-3
2018-04-11-1-1      0.3763708     0.40302554     0.37316527     0.39706642     0.36457448     0.39088777
2018-04-11-1-1      0.3824794     0.40900888     0.37875284     0.40251935     0.36977482     0.39572380
2018-04-11-1-2      0.3922644     0.41893102     0.38911186     0.41302206     0.38054874     0.40687767
2018-04-11-1-3      0.4035459     0.43020943     0.40037247     0.42427661     0.39178599     0.41808956
2018-04-11-2-1      0.4629778     0.48888877     0.45771134     0.48081722     0.44762828     0.47211420
2018-04-11-2-2      0.4604836     0.48622751     0.45492245     0.47786173     0.44464945     0.46882266
2018-04-11-2-3      0.4465868     0.47216956     0.44076663     0.46355150     0.43033429     0.45423427
2018-04-11-2-3      0.4714032     0.49691516     0.46547170     0.48817520     0.45496099     0.47869656
2018-04-11-3-1      0.5848606     0.61052733     0.57915910     0.60197923     0.56876188     0.59264678


Le problème est que cela n'est pas trop visible et cela est surement du au fait que mon point de début et mon point de fin on le même nom: par exemple 2018-04-12-1-1.
Donc j'aimerai connaitre si il y a une manière de n'afficher que certain résultat celui qui m’intéresse la distance entre la fin et le début de mon transect qui doivent porter le même nom.
J'aurai aimé garder l'information du nom de mon transect (2018-04-12-1-1) car c'est mon champ de jointure pour l'ensemble de mes données.

Merci d'avance

Victor Cazalis
Messages : 68
Enregistré le : 24 Aoû 2014, 06:19

Re: Matrice de distance

Messagepar Victor Cazalis » 01 Mai 2018, 05:57

Bonjour,

C'est sûr qu'il y a moyen mais on manque un peu d'information pour vous donner des solutions en code. Le plus simple à mon avis est de modifier la forme de votre tableau avant de calculer les distances pour avoir en colonne :

Nom_transect ; CoordX_depart ; CoordY_depart ; CoordX_arrivee ; CoordY_arrivee

Comme ca vous pourrez calculer la distance ligne par ligne, seulement entre vos points d'intérêts. Si vous avez besoin d'aide pour cela, montrez nous un bout de votre tableau et dites nous comment vous reconnaissez que deux points sont les extrémités d'un même transect.

Bonne journée, Victor

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Matrice de distance

Messagepar Mickael Canouil » 02 Mai 2018, 15:37

Bonjour,

faute d'avoir un exemple reproductible, soit dist2 une matrice de distance préalablement construite:

Code : Tout sélectionner

library(tidyverse)

dist2 <- matrix(rnorm(100), nrow = 5) %>%
  dist(diag = TRUE, upper = TRUE) %>%
  as.matrix()

Image

Petite transformation de la matrice dans un format avec trois colonnes: "start", "end", "distance".

Code : Tout sélectionner

dist2 %>%
  as.data.frame() %>%
  rownames_to_column("Start") %>%
  gather(key = "End", value = "Distance", -Start)

Image

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité