8
votes

Remplacer NA par l'occurrence précédente

Ceci est un échantillon de mes données de CSV. Il contient ~ 10 colonnes.

    Product_id    Product_Weight    Product_Name    Shop_Name ...
[1]    A             10                xxxx            Walmart
[2]    B             12                yyyy            Target
[3]    C             11                zzzz            Target
[4]    A             10                xxxx            Walmart
[5]    C             11                zzzz            Target 

r na

3 commentaires

Ces poids sont-ils toujours définis pour qu'une combinaison de produits_id -id-produit-produit renvoie le même poids?


@LMO oui ils sont.


Un autre Q & A à propos de remplacer NA's: Stackoverflow.com/Questtions/32694313/...


3 Réponses :


9
votes

Bien que la question posée de la "occurrence précédente", cela aurait l'inconvénient que si le premier produit_weight code> dans n'importe quel produit_id code> était na code> Il n'a pas pu être rempli même si nous connaissions le Product_weight code> à partir d'un Product_ID ultérieur > au lieu d'utiliser l'occurrence précédente, nous prenons la moyenne de tous les non-NAS avec le même produit_id code>. Comme ils devraient tous être les mêmes leur moyenne est leur valeur commune.

Si vous voulez vraiment que l'événement précédent utilisez la fonction prev code> fonction où: p> xxx pré>

à la place de na.Accréat code> dans (1) et (3) et n'utilisez pas (2). p>

Les solutions suivantes ont les avantages qu'ils ont tous: p>

  • conserve l'ordre de l'entrée p> li>

  • travail même si le premier product_weight code> dans n'importe quel produit_id code> est na p> li>

  • Ne modifiez pas l'entrée p> li> ul>

    La première solution a l'avantage supplémentaire d'être une seule ligne de code (plus une bibliothèque code> code>) et la deuxième solution a l'avantage supplémentaire de ne pas utiliser aucun packages. p>

    1) zoo :: na.Accrégation forte> Nous utilisons na.Accréat code> dans le package de zoo (qui remplace tous les NAS avec la moyenne des non-NAS) et nous l'appliquons à Product_weight code> séparément pour chaque product_id code>. p> xxx pré>

    donnant: p> xxx PRE>

    2) Aucun packages strong> Utiliser alternativement utiliser moyenne code> à la place de na.Accréte code> où signifie code> est défini comme suit: p> xxx pré>

    3) dplyr / zoo stry> Ajouter des numéros de ligne, groupe par product_id code>, remplissez le NAS Comme dans les solutions antérieures à l'aide de na.Accréat code> comme indiqué ci-dessous ou moyenne code>, récupérez la commande d'origine et supprimez les numéros de ligne: P>

    Lines <- "    Product_id    Product_Weight    Product_Name    Shop_Name
        A             10                xxxx            Walmart
        B             12                yyyy            Target
        C             11                zzzz            Target
        A             NA                xxxx            Walmart
        C             NA                zzzz            Target"
    DF <- read.table(text = Lines, header = TRUE)
    


0 commentaires

6
votes

Une autre option avec dplyr et titsyr : xxx

Le résultat est trié par le produit_id.


1 commentaires

ne peut pas dplyr faire cela sans réorganiser?



2
votes

Voici une solution avec les commandes de base R: xxx

probablement non aussi efficace que la solution dplyr / tiard mentionnée ci-dessus.


0 commentaires