3 votes

Trouver le nombre de mots dans chaque ligne

Supposons que je veuille trouver le nombre de mots dans chaque ligne d'un cadre de données. Donc dans l'exemple suivant, je veux trouver que la première valeur dans la colonne un a 3 mots, la deuxième valeur a 4 mots, et ainsi de suite. Je suppose que c'est une tâche pour l'une des fonctions apply, mais j'ai peu de chance de comprendre cela.

dat = data.frame(one=c("C'est cool",
  "J'aime ma banque", "Il aime la pizza", "Quoi"))

Dois-je travailler avec strsplit() ou est-il préférable d'utiliser la fonction apply() tout en créant une fonction: apply(dat, 1, function(x)...

6voto

Joshua Ulrich Points 68776

Le code ci-dessous devrait le faire, en supposant que tous les mots sont séparés par des espaces.

sapply(strsplit(as.character(dat$one), " "), length)
# [1] 3 4 3 1

2voto

Marek Points 18000

Une autre approche basée sur les expressions régulières. L'idée est de supprimer tout sauf les espaces et de calculer la longueur de la chaîne modifiée (c'est-à-dire le nombre d'espaces, donc +1 pour obtenir le nombre de mots) :

nchar(gsub("[^ ]", "", dat$one)) + 1
# [1] 3 4 3 1

Vous pourriez également ajouter une protection pour gérer les chaînes avec des espaces au début ou à la fin :

nchar(gsub("[^ ]|^ *| *$", "", dat$one)) + 1
# [1] 3 4 3 1

Exemples :

x <- c(" Un deux ", "Un Deux ", " Un deux")
nchar(gsub("[^ ]", "", x)) + 1
# [1] 4 3 3
sapply(strsplit(x, " "), length)
# [1] 3 2 3
nchar(gsub("[^ ]|^ *| *$", "", x)) + 1
# [1] 2 2 2

Une autre vérification de sécurité : gérer les espaces répétés :

x <- " Un    Deux    "
nchar(gsub("[^ ]|^ *| *$", "", gsub(" +", " ", x))) + 1 
# [1] 2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X