Bonjour,
Y aurait - il un moyen me permettant dans une boucle for de ne sélectionner que mes variables de format numérique ?
Autrement, je devrais les écrire manuellement par moi - même.
Version imprimable
Bonjour,
Y aurait - il un moyen me permettant dans une boucle for de ne sélectionner que mes variables de format numérique ?
Autrement, je devrais les écrire manuellement par moi - même.
Utilise is.numeric
Edit : J'ai finalement réussi à isoler mes colonnes.
Mon deuxième soucis étant à présent que j'aurais besoin de créer une boucle qui me permettrais d'appliquer un certain nombre de fois une fonction sur mes variables numériques. Mais mes valeurs sont aberrantes.Code:varnum <- sapply(df, is.numeric)
Code:test <- data.frame(apply(df[varnum], 2 ,mean))
Bonjour,
Qu'entendez-vous par "mes valeurs sont aberrantes" ?
Pouvez-vous nous montrer à quoi ressemble votre sortie ? Et ce à quoi vous vous attendriez ?
Cordialement,
A.D.
Bonjour,
En recopiant manuellement chacune de mes colonnes numériques, le code ressemble à :
Et le résultat est le suivant :Code:test <- data.frame(apply(df[,c("var1", "var2", "var3", "..." , "var149", "var150")], 2 ,mean))
Pièce jointe 182569
Alors que quand je le fais automatiquement :
J'obtiens ceci :Code:
1
2 varnum <- sapply(df, is.numeric) test <- data.frame(apply(df[varnum], 2 ,mean))
Pièce jointe 182570
Re-bonjour,
Je ne sais pas si c'est une faute de frappe lors de l'écriture de votre message mais il me semble qu'il manque une virgule pour la sélection des colonnes du dataframe :
Il faudrait plutôt :
Code:
1
2 varnum <- sapply(df, is.numeric) test <- data.frame(apply(df[,varnum], 2 ,mean))
Cordialement,
A.D.
df[,varnum] et df[varnum] renvoient exactement les mêmes valeurs. Les deux sélections sont identiques.
Code:
1
2
3
4
5 > a <- df[,varnum] == df[varnum] > table(unique(a)) TRUE 146
Il est préférable de ne pas mettre de virgule quand on veut extraire des colonnes.
En effet la notation DF[i] renverra toujours une dataframe tandis que DF[,i] renverra un vecteur si une seule colonne est sélectionnée et une dataframe si plusieurs colonnes sont sélectionnées, ce qui pose souvent problème quand la longueur de i est inconnue.
Cela est bon à savoir en tout cas, j'en prend note.
Du coup, cette subtilité n'est pas lié à la différence de résultat obtenue. Savez vous quelle est t-elle ?
Il y a une erreur, soit dans le vecteur que tu rentres à la main, soit qu'une colonne que tu ne veux pas est sélectionnée par varnum, dans les deux cas ça dépend de tes données, qu'on n'a pas, donc on ne peut pas t'aider.
Sinon plutôt que d'utiliser apply et mean, tu peux utiliser rowMeans pour simplifier (mais ça changera rien à ton problème).
Mes variables étant binaires pour la plupart, j'imagine qu'il y a un soucis dans mon varnum. Mais assez complexe apparemment.
Je ne parviens pas à voir la différence entre les deux jeux de données.
Code:
1
2
3
4
5
6
7
8
9
10
11 a <- df[,c("var1", "var2", ..., "var145")] b <- df[varnum] b <- b[,-1] #suppression de la variable X en trop b <- b[,c("var1", "var2", ..., "var145")] #mise en forme tel que les colonnes soient dans un ordre identique dans a comme dans b. c <- a == b table(unique(c))] TRUE 145
J'avais déjà essayé la fonction colMeans mais elle retourne les mêmes résultats, oui.
Hello,
Les deux tableaux que tu renvois sont les même si tu enlèves les 8 premières lignes du deuxieme tableau.
Si tu as une colonne en trop dans b, elle est supprimée à la ligne 5 de ton code, donc normal que tu ne vois pas de différence.
Bonjour,
Sengar, je ne comprend absolument pas ce que tu essayes de me dire :-/
Theta, mes moyennes étant calculées colonnes par colonnes, je ne vois pas où peut être le soucis par rapport à ça.
La 4ème ligne est pour le coup superflu mais le fait de modifier l'ordre de mes colonnes ne devrait pas avoir d'incidence sur les résultats de la sortie obtenue. J'essayais juste de mettre en évidence le fait que les deux jeux de données sont identiques.
Regarde attentivement les deux tableaux ci dessous.
Ils renvoient les même valeurs si tu enlèves 8 premières lignes du deuxieme tableau.
Dans ton code où tu rentres les noms de variables manuellement, tu as du oublier les 8 premieres variables c'est tout.
En gros, il n'y a pas de valeur aberrantes, tu n'es juste pas sur le même nombre de variables.
Citation:
En recopiant manuellement chacune de mes colonnes numériques, le code ressemble à :
Et le résultat est le suivant :Code:test <- data.frame(apply(df[,c("var1", "var2", "var3", "..." , "var149", "var150")], 2 ,mean))
Pièce jointe 182569
Alors que quand je le fais automatiquement :
J'obtiens ceci :Code:
1
2 varnum <- sapply(df, is.numeric) test <- data.frame(apply(df[varnum], 2 ,mean))
Pièce jointe 182570