IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

data.frame: complexité temporelle


Sujet :

R

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut data.frame: complexité temporelle
    Bonjour,

    j'ai un data.frame contenant deux colonnes: df$P (puissance) et df$DateTime (temps). Je souhaiterais ajouter une troisième colonne df$diffP (différence de puissance à l'instant T et T-2).

    j'ai fait une boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (i in 3:length(df$DateTime)){
        df$diffP[i] = df$P[i] - df$P[i-2] 
    }
    La durée de l'execution est innaceptable: 24s !!

    Y aurait-il un moyen de calculer la différence de puissance en O(n) ? par exemple en 2 ou 3s (au max 10s)

    Quelqu'un trouverait - il mieux que ~24s ?

    Merci d'avance pour votre aide

  2. #2
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Citation Envoyé par ikuzar
    Quelqu'un trouverait - il mieux que ~24s ?
    Difficile de répondre sans disposer de vos données ! Vous ne nous en indiquez même pas la taille...


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  3. #3
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut
    j'ai 30242 lignes en tout

  4. #4
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 417
    Points
    417
    Par défaut
    Bonjour,

    avez-vous essayé l'emploi de la fonction diff()?

    Vous pouvez comparer les temps d’exécution avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system.time(z <- diff(x, lag = 2))
    Bonne continuation

  5. #5
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut
    D'accord,
    je testerai diff, j'ai une solution "à l'arrache" mais diff semble plus approprié, plus propre, encore merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    df <- data.frame(power = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) 
     # add difference 
     diffGap <- 2 
     df$diff <- c(rep(NA, diffGap), head(df$power, -diffGap) - tail(df$power, -diffGap)) 
    View( df )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Extraire une sous data.frame
    Par manoir dans le forum R
    Réponses: 4
    Dernier message: 10/07/2009, 14h39
  2. Dupliquer les lignes d'une data. frame
    Par manoir dans le forum R
    Réponses: 2
    Dernier message: 09/07/2009, 18h25
  3. Mean par colonne dans une data frame
    Par manoir dans le forum R
    Réponses: 3
    Dernier message: 19/06/2009, 11h06
  4. Trier une data frame
    Par manoir dans le forum R
    Réponses: 4
    Dernier message: 28/04/2009, 16h29
  5. Réponses: 2
    Dernier message: 14/11/2008, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo