La solution complète ressemble à ceci:
plot(dataset$x,dataset$y)
Répliquer le dataframe pour couvrir toutes les combinaisons possibles
dataset<-do.call(rbind, replicate(7, dataset, simplify=FALSE))
Maintenant, créez une matrice avec al l les mêmes points de destination, mixtes:
nm=matrix(ncol=3)
for (i in 1:7){
nm<-rbind(nm,do.call(rbind,replicate(7,as.matrix(dataset[i,]),simplify=FALSE)))
}
nm<-nm[-1,]
Renommez les colonnes de la matrice, de sorte qu'ils ont du sens, et de lier la trame de données existante par la nouvelle matrice
colnames(nm)<-c("x2","y2","id.dest")
newds<-cbind(dataset,as.data.frame(nm))
Supprimer trajectoires dupliqués:
newds1<-newds[-which(newds$id==newds$id.dest),]
library(ggplot2)
Conversion destination x & y à numérique du facteur
newds1$x2<-as.numeric(as.character(newds1$x2)) #converting from factor to numeric
newds1$y2<-as.numeric(as.character(newds1$y2))
Tracé des points de destination. . .même comme les points d'origine
plot(newds1$x, newds1$y)
plot(newds1$x2, newds1$y2, col="red")
Maintenant, utilisez le code de cette réponse:
Convert Begin and End Coordinates into Spatial Lines in R
liste brute pour stocker des objets Lines:
l <- vector("list", nrow(newds1)) #
Ce l
est maintenant vecteur vide w/nombre de lignes défini par la longueur (nrow) de newds1
origine Fractionnement et coordonnées de destination que je peux exécuter ce script:
origins<-data.frame(cbind(newds1$x, newds1$y))
destinations<-data.frame(cbind(newds1$x2, newds1$y2))
library(sp)
for (i in seq_along(l)) {
l[[i]] <- Lines(list(Line(rbind(origins[i, ], destinations[i,]))), as.character(i))
}
l.spatial<-SpatialLines(l)
plot(l.spatial, add=T)
'Combn (id, 2, FUN = function (x) pâte (x, effondrement = "_"))'? –