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 :

Enlever des NA dans une colonne bien précise


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Enlever des NA dans une colonne bien précise
    Bonjour,

    Je cherche une fonction simple pour supprimer des lignes contenant des NA dans une colonne précise. Je ne veux pas supprimer ma ligne complète. Et j'ai beau tout tenter avec -which, na.omit etc. je n'y arrive pas.

    Pourriez-vous m'aider?

    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Points : 461
    Points
    461
    Par défaut
    Ce que tu essayes de faire n'est pas possible.
    Ou tu supprimes toute la ligne, ou tu laisses ta colonne avec des NA, valeurs vides ("") ou autre, mais toutes les colonnes de ton tableau doivent avoir la même longueur, ça parait logique.

    En gros, si tu pars de ça :
    a b c
    1 1 2 4
    2 2 NA 3
    3 3 3 5

    Tu vas avoir un problème si tu ne supprimes pas toute la ligne là où il y a un NA (exemple bidon pas réalisable):

    a b c
    1 1 2 4
    2 2 3 3
    3 3 5


    -> Ceci n'est pas un tableau valable ^^


  3. #3
    Futur Membre du Club
    Femme Profil pro
    stagiaire
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : stagiaire

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    Peut-être que la réponse précédente est suffisante, mais si ce que vous souhaitez est de ne filtrer les NA que selon une colonne vous pouvez utiliser "complete.cases" :
    Imaginons que vous avez le data.frame suivant (appelé "data") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    data
           a  b  c
     [1,]  1  1  1
     [2,]  2  2 NA
     [3,]  3  5  5
     [4,]  4  4  4
     [5,]  5 NA 27
     [6,]  6  5  5
     [7,]  7  4  4
     [8,]  8 NA 64
     [9,]  9 NA NA
    [10,] 10 45 NA
    et que vous souhaitiez supprimer les lignes correspondant à des valeurs de NA dans la colonne 3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data2<-data[complete.cases(data[,3]),]
    et vous obtenez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    data2
         a  b  c
    [1,] 1  1  1
    [2,] 3  5  5
    [3,] 4  4  4
    [4,] 5 NA 27
    [5,] 6  5  5
    [6,] 7  4  4
    [7,] 8 NA 64
    Cela résoudrait-il votre problème ?

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Oh merci c'est exactement ce que je voulais

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur d'étude
    Inscrit en
    Avril 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur d'étude

    Informations forums :
    Inscription : Avril 2015
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Eva.D Voir le message
    Bonjour,
    Peut-être que la réponse précédente est suffisante, mais si ce que vous souhaitez est de ne filtrer les NA que selon une colonne vous pouvez utiliser "complete.cases" :
    Imaginons que vous avez le data.frame suivant (appelé "data") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    data
           a  b  c
     [1,]  1  1  1
     [2,]  2  2 NA
     [3,]  3  5  5
     [4,]  4  4  4
     [5,]  5 NA 27
     [6,]  6  5  5
     [7,]  7  4  4
     [8,]  8 NA 64
     [9,]  9 NA NA
    [10,] 10 45 NA
    et que vous souhaitiez supprimer les lignes correspondant à des valeurs de NA dans la colonne 3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data2<-data[complete.cases(data[,3]),]
    et vous obtenez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    data2
         a  b  c
    [1,] 1  1  1
    [2,] 3  5  5
    [3,] 4  4  4
    [4,] 5 NA 27
    [5,] 6  5  5
    [6,] 7  4  4
    [7,] 8 NA 64
    Cela résoudrait-il votre problème ?
    Bonjour,

    est-ce qu'il y aurait un moyen de supprimer les NA et garder les lignes correspondantes, en les remplaçant par quelque chose d'autre pour que les colonnes du tableau gardent la même longueur. Le but serait de pouvoir faire un graphique ensuite avec toutes le lignes, mêmes celles ou il y avait des NA

  6. #6
    Futur Membre du Club
    Femme Profil pro
    stagiaire
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : stagiaire

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par arnaud de Coninck Voir le message
    Bonjour,

    est-ce qu'il y aurait un moyen de supprimer les NA et garder les lignes correspondantes, en les remplaçant par quelque chose d'autre pour que les colonnes du tableau gardent la même longueur. Le but serait de pouvoir faire un graphique ensuite avec toutes le lignes, mêmes celles ou il y avait des NA
    Bonjour,
    Je ne suis pas sûre d'avoir bien compris ce que vous vouliez faire
    S'il s'agit de remplacer tous les NA par la même valeur (ici 0) :
    Vous pouvez aussi effectuer cette action sur une seule colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data[is.na(data[,1])]<-0

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur d'étude
    Inscrit en
    Avril 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur d'étude

    Informations forums :
    Inscription : Avril 2015
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    merci pour votre réponse, c'est vrai que mon message n'est pas trop clair. En fait j'ai le tableau suivant, avec des concentrations d'élément en fonction de la profondeur (composite depth et les années. Une année correspond à une épaisseur, ex: 2005 va de 2.7mm à 3.0mm, 2006: de 2.5 à 2.6, etc..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    composite.depth year          Al          Si           P           S          Cl          K         Ca
    30             3.0 2005 0.000836473 0.011320262 0.000724943 0.000474001 0.000948002 0.08141666 0.04173998
    29             2.9   NA 0.000788350 0.011431082 0.000000001  0.000478641 0.000000001 0.08390301 0.04088160
    28             2.8   NA 0.000486832 0.011368954 0.000429557 0.001202761 0.000000001 0.08407871 0.04218254
    27             2.7   NA 0.001778258 0.011427495 0.001457589 0.001428437 0.000320670 0.08847563 0.04358190
    26             2.6 2006 0.000943874 0.011709934 0.000737401 0.001002866 0.000707905 0.09185071 0.04471602
    25             2.5   NA 0.000954130 0.012850939 0.001222479 0.001043580 0.000327982 0.09135795 0.04400925
    24             2.4 2007 0.001773155 0.014816366 0.000601070 0.000270481 0.000270481 0.09740333 0.04375787
    23             2.3 2008 0.001413935 0.013327093 0.000631758 0.001263517 0.000722010 0.09744120 0.04527601
    22             2.2   NA 0.002365972 0.013194846 0.001880645 0.001122320 0.000970655 0.09994717 0.04783511
    21             2.1 2009 0.000520058 0.013674457 0.000703607 0.001193073 0.000397691 0.10486810 0.04894660
    20             2.0   NA 0.002613637 0.013529415 0.001291444 0.000707219 0.000000000 0.10577543 0.04393985
    19             1.9 2010 0.001398783 0.014236505 0.001305531 0.000341925 0.000279757 0.10055698 0.04441914
    18             1.8   NA 0.001663461 0.012209176 0.001757619 0.000784651 0.000345247 0.10122003 0.04485068
    17             1.7   NA 0.002276676 0.012015792 0.001644266 0.001833989 0.000126482 0.09565203 0.04382602
    16             1.6 2011 0.001560828 0.011403604 0.000700780 0.000509658 0.000000001 0.09498756 0.04179198
    15             1.5   NA 0.001148499 0.011772119 0.000000001 0.000957083 0.000000001 0.09436836 0.04361107
    14             1.4   NA 0.000477181 0.010847924 0.000954363 0.001495168 0.000000001 0.09457736 0.04138753
    13             1.3   NA 0.001552920 0.008461829 0.001362766 0.001521228 0.000348615 0.08686844 0.04211899
    12             1.2   NA 0.000000001 0.008822382 0.000632429 0.000822157 0.000221350 0.08793922 0.03902086
    11             1.1   NA 0.000603871 0.008454197 0.000572088 0.000540306 0.000000000 0.08228539 0.03912450
    10             1.0   NA 0.001509006 0.008824402 0.000852916 0.001115352 0.000000000 0.07932120 0.03526480
    9              0.9   NA 0.000581450 0.007798265 0.001265508 0.001128696 0.000684058 0.08191599 0.03481857
    8              0.8   NA 0.001223572 0.006693659 0.000863698 0.001547459 0.000000000 0.07589745 0.03382817
    7              0.7   NA 0.001598099 0.006638259 0.000491723 0.001352238 0.000000000 0.06007214 0.02950337
    6              0.6   NA 0.001126383 0.005091252 0.001306604 0.001621992 0.000000000 0.05158835 0.02766397
    5              0.5   NA 0.000786997 0.004259042 0.001527700 0.003518339 0.000462939 0.04184971 0.02615607
    4              0.4   NA 0.000321730 0.002849606 0.001103073 0.002252108 0.000000000 0.02633588 0.02132609
    3              0.3   NA 0.000000000 0.000246960 0.000905521 0.003416285 0.000370441 0.01382978 0.01572314
    2              0.2   NA 0.000000000 0.000436172 0.001490256 0.002471643 0.000327129 0.01064988 0.01501160
    1              0.1   NA 0.000000000 0.000000000 0.001260379 0.002588886 0.000000000 0.01076432 0.01454545

    Si je veux tracer les concentrations en fonction des années ça ne marche pas à cause des NA. J'ai essayer en les remplaçant par 0, mais le graph n'est pas bon.
    ce que je viens de faire, c'est de remplacer les NA par leurs années correspondantes dans une nouvelle colonne,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    composite.
    depth year	year_full	Al	Si	P	S	Cl	K	Ca
    3	2005	2005	0.000836473	0.011320262	0.000724943	0.000474001	0.000948002	0.08141666	0.04173998
    2.9	NA	2005	0.00078835	0.011431082	0.000000001	0.000478641	0.000000001	0.08390301	0.0408816
    2.8	NA	2005	0.000486832	0.011368954	0.000429557	0.001202761	0.000000001	0.08407871	0.04218254
    2.7	NA	2005	0.001778258	0.011427495	0.001457589	0.001428437	0.00032067	0.08847563	0.0435819
    2.6	2006	2006	0.000943874	0.011709934	0.000737401	0.001002866	0.000707905	0.09185071	0.04471602
    2.5	NA	2006	0.00095413	0.012850939	0.001222479	0.00104358	0.000327982	0.09135795	0.04400925
    2.4	2007	2007	0.001773155	0.014816366	0.00060107	0.000270481	0.000270481	0.09740333	0.04375787
    2.3	2008	2008	0.001413935	0.013327093	0.000631758	0.001263517	0.00072201	0.0974412	        0.04527601
    2.2	NA	2008	0.002365972	0.013194846	0.001880645	0.00112232	0.000970655	0.09994717	0.04783511
    2.1	2009	2009	0.000520058	0.013674457	0.000703607	0.001193073	0.000397691	0.1048681	1      0.0489466
    2	NA	2009	0.002613637	0.013529415	0.001291444	0.000707219	0.000000001	0.10577543	0.04393985
    1.9	2010	2010	0.001398783	0.014236505	0.001305531	0.000341925	0.000279757	0.10055698	0.04441914
    1.8	NA	2010	0.001663461	0.012209176	0.001757619	0.000784651	0.000345247	0.10122003	0.04485068
    1.7	NA	2010	0.002276676	0.012015792	0.001644266	0.001833989	0.000126482	0.09565203	0.04382602
    1.6	2011	2011	0.001560828	0.011403604	0.00070078	0.000509658	0.000000001	0.09498756	0.04179198
    1.5	NA	2011	0.001148499	0.011772119	0.000000001	0.000957083	0.000000001	0.09436836	0.04361107
    1.4	NA	2011	0.000477181	0.010847924	0.000954363	0.001495168	0.000000001	0.09457736	0.04138753
    1.3	NA	2011	0.00155292	0.008461829	0.001362766	0.001521228	0.000348615	0.08686844	0.04211899
    1.2	NA	2011	0.000000001	0.008822382	0.000632429	0.000822157	0.00022135	0.08793922	0.03902086
    1.1	NA	2011	0.000603871	0.008454197	0.000572088	0.000540306	0.000000001	0.08228539	0.0391245
    1	NA	2011	0.001509006	0.008824402	0.000852916	0.001115352	0.000000001	0.0793212	0.0352648
    0.9	NA	2011	0.00058145	0.007798265	0.001265508	0.001128696	0.000684058	0.08191599	0.03481857
    0.8	NA	2011	0.001223572	0.006693659	0.000863698	0.001547459	0.000000001	0.07589745	0.03382817
    0.7	NA	2011	0.001598099	0.006638259	0.000491723	0.001352238	0.000000001	0.06007214	0.02950337
    0.6	NA	2011	0.001126383	0.005091252	0.001306604	0.001621992	0.000000001	0.05158835	0.02766397
    0.5	NA	2011	0.000786997	0.004259042	0.0015277	11     0.003518339	0.000462939	0.04184971	0.02615607
    0.4	NA	2011	0.00032173	0.002849606	0.001103073	0.002252108	0.000000001	0.02633588	0.02132609
    0.3	NA	2011	0.000000001	0.00024696	0.000905521	0.003416285	0.000370441	0.01382978	0.01572314
    0.2	NA	2011	0.000000001	0.000436172	0.001490256	0.002471643	0.000327129	0.01064988	0.0150116
    0.1	NA	2011	0.000000001	0.000000001	0.001260379	0.002588886	0.000000001	0.01076432	0.01454545
    Voici le script, ça peut aider certain: (xrf3 étant ma table)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # On initialise une colonne qui va contenir la même information que la colone Year, mais sans les NA 
    xrf2$year_full <- NA
     
    # On remplit ensuite cette colonne élément par élément 
    tmp <- NA # tmp va être la valeur que l'on va attribuer en position i 
     
    for (i in 1:n) { 					
    		if ( ! is.na(xrf3$year[i])) tmp <- xrf3$year[i] # dès que l'on rencontre quelque chose qui n'est pas NA dans la colonne Varves, on remplace tmp par cette valeur : 
    		xrf3$year_full[i] <- tmp                        #cela arrive par exemple quand i vaut 1 ! 
    		}
    maintenant je n'arrive toujours pas à avoir le graph que je veux, mais ça c'est un autre sujet, je vais ouvrir une autre discussion.
    Bonne journée
    ADC

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

Discussions similaires

  1. Mise à jour des données dans une colonne
    Par BZH75 dans le forum SQL
    Réponses: 9
    Dernier message: 09/01/2008, 16h18
  2. Réponses: 3
    Dernier message: 06/08/2007, 15h42
  3. insertion des valeurs dans une colonne
    Par freestyler1982 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/01/2007, 16h38
  4. [EXCEL] Mise en évidence des doublons dans une colonne
    Par dacid dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/10/2006, 19h14
  5. Ecrire les noms des fichiers dans une colonne
    Par REGIMBAL dans le forum Access
    Réponses: 1
    Dernier message: 20/04/2006, 11h29

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