Compter certaines occurrences seulement

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

Morgane le Goff
Messages : 10
Enregistré le : 02 Nov 2017, 15:17

Compter certaines occurrences seulement

Messagepar Morgane le Goff » 06 Mai 2019, 16:10

Bonjour,


j'ai un jeu de données qui se compose d'individus en ligne et de "trial", "look" et "latency" en colonne.
J'aimerais pouvoir compter pour les données d'un même individu le nombre de trials effectués, uniquement lorsqu'il y a 0 ou 1 dans la cellule (ne pas compter NC).

Je vous joins le jeu de données :


Code : Tout sélectionner

> data=dput(Fish)
structure(list(Trial_1 = structure(c(3L, 3L, 3L, 2L, 2L, 2L,
3L), .Label = c("0", "1", "NC"), class = "factor"), Look_1 = structure(c(2L,
2L, 2L, 2L, 2L, 2L, 2L), .Label = c("NO", "Y"), class = "factor"),
    Latency_1 = c(NA, NA, NA, 72L, 146L, 75L, NA), Trial_2 = structure(c(3L,
    2L, 2L, 2L, 2L, 2L, 3L), .Label = c("0", "1", "NC"), class = "factor"),
    Look_2 = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("N",
    "Y"), class = "factor"), Latency_2 = c(NA, 178L, 517L, 162L,
    325L, 88L, NA), Trial_3 = structure(c(3L, 3L, 1L, 2L, 2L,
    2L, 2L), .Label = c("0", "1", "NC"), class = "factor"), Look_3 = structure(c(3L,
    3L, 3L, 2L, 3L, 3L, 3L), .Label = c("N", "y", "Y"), class = "factor"),
    Latency_3 = c(NA, NA, 420L, 190L, 87L, 420L, 27L), Trial_4 = structure(c(3L,
    3L, 2L, 2L, 2L, 3L, 2L), .Label = c("0", "1", "NC"), class = "factor"),
    Look_4 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "Y", class = "factor"),
    Latency_4 = c(NA, NA, 739L, 509L, 124L, NA, 29L), Trial_5 = structure(c(NA,
    3L, 2L, 1L, 3L, 3L, 3L), .Label = c("0", "1", "NC"), class = "factor"),
    Look_5 = structure(c(NA, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "Y", class = "factor"),
    Latency_5 = c(NA, NA, 233L, 112L, NA, NA, NA)), .Names = c("Trial_1",
"Look_1", "Latency_1", "Trial_2", "Look_2", "Latency_2", "Trial_3",
"Look_3", "Latency_3", "Trial_4", "Look_4", "Latency_4", "Trial_5",
"Look_5", "Latency_5"), row.names = 27:33, class = "data.frame")



Merci d'avance pour votre aide,


Morgane

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

Re: Compter certaines occurrences seulement

Messagepar Serge Rapenne » 06 Mai 2019, 20:40

Bonjour,

Une possibilité (j'ai appellé dta le jeu de donnée):

Code : Tout sélectionner

col_trial<-grep("Trial",colnames(dta)) # on cherche les colonnes Trial
dta[col_trial]<-lapply(dta[col_trial],function(x) as.numeric(as.character(x))) #on transforme ces colonnes de factor à entier et en même temps on se débarrasse des NC

comptage<-apply(dta[col_trial],1,sum,na.rm=T) #on calcul les effectifs
comptage
27 28 29 30 31 32 33
 0  1  3  4  4  3  2


Serge

Gabriel Terraz
Messages : 591
Enregistré le : 26 Sep 2011, 15:11

Re: Compter certaines occurrences seulement

Messagepar Gabriel Terraz » 07 Mai 2019, 18:11

Si les trial à compter ne sont que les valeurs 1, on peut grandement simplifier :

Code : Tout sélectionner

dta_tr <- dta[, grep("Trial", names(dta))]
rowSums(dta_tr == "1", na.rm =T)

Morgane le Goff
Messages : 10
Enregistré le : 02 Nov 2017, 15:17

Re: Compter certaines occurrences seulement

Messagepar Morgane le Goff » 10 Mai 2019, 20:32

Bonjour à tous,


Merci Serge, je vais essayer ça!
Et je dois compter les O et les 1, seuls les NC doivent être exclus.

Merci pour vos réponses!


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité

cron