Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1041 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Script sous R: ajouter une valeur en début de liste

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Script sous R: ajouter une valeur en début de liste

n°2187771
yamazaki
Still just a rat in a cage?
Posté le 26-04-2013 à 20:57:09  profilanswer
 

Bonjour, et désolé si le sujet existe / un topic unique existe / je suis pas dans la bonne catégorie, et merci de me rediriger le cas échéant (R, c'est pas facile à rechercher!...)
 
Avant toute explication, la question : Comment ajouter une valeur en début de liste à chacune des listes d'un vecteur contenant X listes?
 
J'ai un fichier que me pond un programme qui trace des cellules mobiles observées par une caméra. Le fichier de sortie est un csv et comprend 5 colonnes: track, Time, X, Y, Z.
Ce fichier présente donc le tracage, dans un seul fichier, de plusieurs cellules dont la position au temps T est donnée par ses coordonnées X,Y. Dans un fichier, j'ai donc toutes une séries de données pour le track1, pour le track2, etc. Ce nombre de track peut atteindre un nombre assez élevé. Peu de fichiers à injecter, mais chacun un très grand nombre de tracks. On me demande de faire plusieurs choses, et sous R (d'autres fonctions utilisées plus tard et déjà existantes nécessitent R, merci donc, même si je peux comprendre la base de la réflextion, de ne pas me proposer de bosser plutôt sous Excel).
 
Je dois calculer une distance nette parcourue. Donc on prend les coordonnées X,Y de la ligne concernée, qu'on compare aux coordonnées du temps0, et on obtient un résultat. Là où j'ai problème, et ca doit pourtant être pas super compliqué, c'est que j'ai X tracks à traiter, et que pour chacun, j'ai n-1 résultats de distance. Or je veux bien sûr créer une colonne avec le résultat de mes calculs, ce qui induit un décalage.
 
L'idée de base: je commence par splitter mes données en fonction du track, puis j'applique la formule, puis je cherche à ajouter la colonne.  
J'obtiens:
X1  Y1  D1    (calculée par rapport à Y2-Y1/X2-X1)
X2  Y2  D2    (calculée par rapport à Y3-Y1/X3-X1)
X3  Y3  et là il calcule une valeur D3 en recyclant X2 et Y2 au lieu de s'arréter.  
Du coup, je lui dis de procéder sur n-1, et j'ai bien le bon nombre de distances calculées.
J'obtiens donc x listes correspondant à N tracks, chacune faisant n-1 lignes que le track dont elle est issue.
 
Quelque part entre ces 3 étapes, il faudrait que je rajoute un NA avoir le même nombre de valeur dans la colonne que je rajoute que dans celle des données de base, sinon il se crée un décalage. Et puisque je suis embettant, je voudait que ce NA soit en première ligne (vu que c'est la ligne de référence, par rapport à laquelle le reste est calculé).
 
Je veux donc :
X1  Y1  NA
X2  Y2  D1    (calculée par rapport à Y2-Y1/X2-X1)
X3  Y3  D2    (calculée par rapport à Y3-Y1/X3-X1)
 
 
Voici mon script:
 

Citation :

##Rename Data
t1<- trackdata2
 
## Computing the NetDistance (ND)
## Split the data
dfs <- split(t1,t1$track)
 
## calculation
NDtemp1 <- sapply( dfs , function(x) dist( x[,c("X","Y" )] , diag = TRUE)
[1:nrow(x)-1], simplify = TRUE, USE.NAMES = TRUE )
 
## Convert to usable data and append to dataset
NDtemp2<-unsplit(NDtemp1, t1$track)
ND=as.matrix(NDtemp2)
NM1<-cbind(t1, ND)
 
## NetDistanceSquared (ND^2)
ND2=ND*ND
newmatrix<-cbind(NM1, ND2)
 
## Export completed dataset
write.table(newmatrix, "d:/path/newmatrix.txt", sep="\t" )


Au moment du cbind, j'ai autant de warnings que de tracks, car il manque une valeur pour chacun, qui est remplacée par un 0, mais en fin de liste. Il me faut au pire un 0 en début de liste pour chaque track, au mieux un NA.
 
Comment ajouter une valeur, à chacun de mes track, en début de track, pour avoir un vecteur aussi long que celui de base?
 
J'espère avoir été clair, mais c'est pas gagné... [:tinostar]
Merci d'avance.

mood
Publicité
Posté le 26-04-2013 à 20:57:09  profilanswer
 

n°2188074
yamazaki
Still just a rat in a cage?
Posté le 29-04-2013 à 18:49:00  profilanswer
 

Ok, ai trouvé (je semble pas pouvoir effacer le thread), donc si jamais ca peut servir pour d'autres...
 
Au moment de sapply la fonction, j'ai juste eu à modifier le range: 1:nrow(x)-1] en concatenant de la sorte: [c(NA,2:nrow(x))].
 
De cette facon, j'introduis bien un NA pour chaque sous-liste. :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Script sous R: ajouter une valeur en début de liste

 

Sujets relatifs
Passer une variable d'un script sh vers script mysqlje n'arrive pas à ajouter des servers web sous netbeans
aide sur script shellProblème de script de compte à rebours + affichage lien
Script de recherche sans sqlScript PHP (rémunéré)
[VBS] Explication de scriptBatch Recherche fichier à partir d'une liste et Copier
Liste option non selectionable sous android 2.3Boucle vérification d'une valeur dans une variable
Plus de sujets relatifs à : Script sous R: ajouter une valeur en début de liste


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR