J'ai un problème avec le comptage d'objets dans un vecteur. Le problème est que j'ai une colonne avec des identifiants et une colonne d'indicateurs (réponses à choix multiples). Pour gérer le choix multiple, je l'ai mis dans une valeur vectorisée. Voici l'exemple, qui ressemble certainement à mes données:

structure(list(id = c("000c6", 
"0016c", "00194", 
"00221", "0026e", 
"002fa", "0032a", 
"00331", "004ea", 
"00616"), indicators = list(c("1", 
"0", "1", "0", "0", "1", "0", "1", "-1", "0", "0", "0", "0", 
"0", "0", "0", "1", "0", "0", "0", "0", "1", "0", "0", "0", "0", 
"0", "0", "-1", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"1", "1", "0", "0", "", "1", "0", "0", "0", "0", "0", "1", "1", 
"0", "0", "0", "0", "0", "0", "0", "0", "1", "1", "0", "0", "0", 
"1", "-1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"1", "0", "0", "0", "0", "0", "0", "0", "-1", ""), c("", "0", 
"-1", "0", "0", "0", "0", "1", "0", "1", "1", "0", "-1", "0", 
"1", "0", "0", "0", "1", "0", "0"), c("", "1", "1", "1", "0", 
"0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "1", "0", 
"1", "0", "0", "0", "1", "0", "0", "1", "0", "0", "0", "0", "1", 
"0", "0", "0", "0", "1", "0", "1", "0", "0", "0", "0", "", "", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "", "", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "", "", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "", "", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", ""), NULL, NULL, c("", "0", "-1", "0", "-1", "0", "-1", 
"-1", "1", "0", "-1", "1", "0", "0", "0", "0", "0", "0", "0", 
"1", "0", "0", "0", "0", "0", "0", "1", "1", "0", "0", "0", "1", 
"0", "-1", "0", "-1", "0", "0", "-1", "0", "0", "1", "", "", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "-1", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "", "", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "", "", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", ""), c("1", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", ""), NULL, NULL, c("", "0", "1", "0", "1", "-1", "0", 
"0", "0", "1", "-1", "1", "-1", "0", "0", "1", "0", "-1", "0", 
"0", "0", "0", "-1", "0", "0", "1", "0", "0", "1", "0", "0", 
"1", "0", "-1", "0", "0", "-1", "0", "-1", "0", "0", "0", "", 
"", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "", "", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "", "", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "", "", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", ""))), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-10L))

Je veux compter le nombre de cellules dans indicators, où la valeur n'est pas NULL. Comment puis je faire ça? La principale difficulté pour moi est que la colonne indicators contient des vecteurs, pas une seule valeur.

0
k1rgas 28 août 2020 à 10:58

2 réponses

Meilleure réponse

Nous pouvons utiliser lengths pour obtenir la longueur de chaque élément de la colonne indicators.

lengths(df$indicators)
#[1]  86  21 215   0   0 172  43   0   0 215

Nous pouvons maintenant compter les valeurs supérieures à 0.

sum(lengths(df$indicators) > 0)
#[1] 6

Bien que vous n'ayez pas besoin d'une boucle ici, vous pouvez également utiliser sapply avec is.null:

sum(!sapply(df$indicators, is.null))
2
Ronak Shah 28 août 2020 à 08:00

Une autre option de base R utilisant

  • length + Filter
> length(Filter(length,df$indicators))
[1] 6
  • length + Filter + is.null
> length(Filter(Negate(is.null),df$indicators))
[1] 6
2
ThomasIsCoding 28 août 2020 à 08:04