utilisation de subset pour compter

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

Imed Salah
Messages : 15
Enregistré le : 16 Oct 2017, 13:00

utilisation de subset pour compter

Messagepar Imed Salah » 17 Oct 2017, 10:27

Bonjour à tous,

je vous remercie d'avance à m'aider à résoudre ce soucis.
Remarque : mes données réelles sont importés de grande taille ..donc je vous donne un exemple et par la suite je l'adapterai à ma problème.

j'ai un vecteur

Code : Tout sélectionner

m=c(1:10)
#, j'ai déjà mon data frame préparé
c1=c("test","test1","test2","test3","test4","test5","test6","test7","test8","test9","test10")
v=c(1,2,2,3,3,4,5,5,5,5)
 df=data.frame(c1,v)


j'ai décide en faite de compter le nombre de répetition d'un élement de vecteur v de df et les recupérer par la suite ce nombre de répétition dans un autre vecteur nomme c3.

Code : Tout sélectionner

for(i in 1:length(m))
{
  c2[i]=subset(df,subset=(df$v %in% m[i])
  c3[i]=nrow(c2[i])

}


mais ceci ne marche pas!
marci pour votre aide!

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: utilisation de subset pour compter

Messagepar Serge Rapenne » 17 Oct 2017, 12:26

Bonjour,

Une petite remarque préliminaire. Mettre le code qui pose problème est très bien mais dans aucun de tes 3 messages, ce code n'était utilisable en l'état. Dans celui ci, C1 et v sont de tailles différentes et donc df=data.frame(c1,v) ne fonctionne pas. Merci de faire plus attention à fournir des exemples reproductibles.

Pour faire ce que tu souhaites, il y a plein de manière de faire.
En voici 2 :

- Si tu veux garder une boucle :

Code : Tout sélectionner

m=1:10
df=data.frame(c1=c("test1","test2","test3","test4","test5","test6","test7","test8","test9","test10"),v=c(1,2,2,3,3,4,5,5,5,5))
c3<-rep(NA,length(m))

for(i in 1:length(m))
{
  c3[i]<-nrow(subset(df,v == m[i]))
 }
 c3
 [1] 1 2 2 1 4 0 0 0 0 0


- sans boucle et en une ligne

Code : Tout sélectionner

m=1:10
df=data.frame(c1=c("test1","test2","test3","test4","test5","test6","test7","test8","test9","test10"),v=c(1,2,2,3,3,4,5,5,5,5))

c3<-sapply(m,function(x) sum(df$v==x))
c3
 [1] 1 2 2 1 4 0 0 0 0 0


Personnellement je préfère la 2eme solution qui est plus facile à lire.

Serge

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

Re: utilisation de subset pour compter

Messagepar Logez Maxime » 17 Oct 2017, 12:56

Bonjour,

Tu peux aussi utiliser la fonction table

Code : Tout sélectionner

table(factor(df$v, levels = m))
Cordialement,
Maxime

Imed Salah
Messages : 15
Enregistré le : 16 Oct 2017, 13:00

Re: utilisation de subset pour compter

Messagepar Imed Salah » 17 Oct 2017, 13:05

Merci beaucoup Logez Maxime et Serge Rapenne !

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: utilisation de subset pour compter

Messagepar Serge Rapenne » 17 Oct 2017, 14:19

@Maxime

Le cerveau est une drôle de machine, pourquoi n'ai je pas pensé à "table" pour compter des occurrences ???

Serge

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

Re: utilisation de subset pour compter

Messagepar Logez Maxime » 17 Oct 2017, 14:45

@Serge

Peut-être parce que tu es resté dans la logique de la boucle du post initiale ?

Cordialement,
Maxime


Retourner vers « Questions en cours »

Qui est en ligne

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