sélection de colonne selon une condition

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

valérie coudrain
Messages : 270
Enregistré le : 28 Juil 2009, 18:37

sélection de colonne selon une condition

Messagepar valérie coudrain » 23 Nov 2014, 09:51

Bonjour,
Dans un dataframe je voudrais éliminer toutes les colonnes qui ne contiennent pas de nombre supérieur à 0 ou un seul nombre supérieur à 0.

Code : Tout sélectionner

df <- data.frame(a=rep(c(1,3),2),b=c(0,0,0,2), c=c(1,0,2,3),d=c(0,0,0,0))
   a b c d
1  1 0 1 0
2  3 0 0 0
3  1 0 2 0
4  3 2 3 0



Je voudrais éliminer les colonnes b et d à l'aide d'une fonction qui détermine d'abord les colonnes qui correspondent à la condition puis les élimine.
Pour éliminer les colonnes qui ne contiennent que des 0 je peux le faire en utilisant colSums

Code : Tout sélectionner

df[,colSums(df)>1]


Mais je ne trouve pas comment coder pour les colonnes contenant un seul nombre supérieur à 0.

Merci

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 23 Nov 2014, 10:28

Code : Tout sélectionner

df <- data.frame(a=rep(c(1,3),2),b=c(0,0,0,2), c=c(1,0,2,3),d=c(0,0,0,0))
idx <- colSums(apply(df, 2, function(x) x > 0)) == 1
df[, idx, drop = FALSE]
Renaud

valérie coudrain
Messages : 270
Enregistré le : 28 Juil 2009, 18:37

Messagepar valérie coudrain » 23 Nov 2014, 10:32

super, merci!

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 24 Nov 2014, 07:36

Bonjour,

juste une précision pour simplifier le code de Renaud.

Code : Tout sélectionner

apply(df, 2, function(x) x > 0)
# peut être remplacer directement par
df>0

Cordialement,
Maxime


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité