375 votes

Comment trouver la longueur d'une chaîne de caractères dans R

Comment trouver la longueur d'une chaîne (nombre de caractères dans une chaîne) sans la diviser dans R ? Je sais comment trouver la longueur d'une liste mais pas d'une chaîne de caractères.

Et qu'en est-il des chaînes Unicode ? Comment puis-je trouver la longueur (en octets) et le nombre de caractères (runes, symboles) d'une chaîne Unicode ?

Question connexe :

1 votes

En utilisant evaluate() avec une fonction anonyme pour retourner le dernier élément du vecteur c(8, 4, 0). Votre fonction anonyme ne doit prendre qu'un seul argument qui doit | être une variable x .

459voto

Gavin Simpson Points 72349

Ver ?nchar . Par exemple :

> nchar("foo")
[1] 3
> set.seed(10)
> strn <- paste(sample(LETTERS, 10), collapse = "")
> strn
[1] "NHKPBEFTLY"
> nchar(strn)
[1] 10

0 votes

@hadley En effet, ou d'ailleurs tout vecteur de caractère avec un ou plusieurs NA s. (Bien que cela soit documenté pour être ainsi).

7 votes

Ou utilisez stri_length de stringi - il fonctionne bien avec les NA et il est plus rapide :) Consultez mon post !

6 votes

Depuis la version 3.3.1, les valeurs de base par défaut sont les suivantes nchar(NA) ## [1] NA : voir nchar RDocumentation

72voto

bartektartanus Points 2472

Utilisez stringi et stri_length fonction

> stri_length(c("ala ma kota","ABC",NA))
[1] 11  3 NA

Pourquoi ? Parce que c'est la plus RAPIDE des solutions présentées :)

require(microbenchmark)
require(stringi)
require(stringr)
x <- c(letters,NA,paste(sample(letters,2000,TRUE),collapse=" "))
microbenchmark(nchar(x),str_length(x),stri_length(x))
Unit: microseconds
           expr    min     lq  median      uq     max neval
       nchar(x) 11.868 12.776 13.1590 13.6475  41.815   100
  str_length(x) 30.715 33.159 33.6825 34.1360 173.400   100
 stri_length(x)  2.653  3.281  4.0495  4.5380  19.966   100

et fonctionne aussi très bien avec les NA

nchar(NA)
## [1] 2
stri_length(NA)
## [1] NA

EDIT 2021

NA n'est plus valable si vous utilisez la dernière version de R.

1 votes

Merci pour la réponse et pour la grande bibliothèque (c'est votre bibliothèque si j'ai bien compris). Qu'en est-il des chaînes de caractères Unicode ?

1 votes

Cela fonctionne bien aussi. Regardez cet exemple : stri_length('\u0105') La longueur en est une, mais... stri_numbytes('\u0105') 2 octets sont utilisés

0 votes

Il convient de le mettre à jour car nchar() a maintenant un compte d'arguments pour les NA : allowNA = FALSE

27voto

rengis Points 4733

Vous pouvez également utiliser le stringr paquet :

library(stringr)
str_length("foo")
[1] 3

25voto

sobingt Points 161
nchar("STRING")

Vérifiez ce

7voto

Jonathan Points 11
nchar(YOURSTRING)

vous devrez peut-être d'abord le convertir en vecteur de caractères ;

nchar(as.character(YOURSTRING))

1 votes

A l'exception d'une entrée de facteur, la coercition est effectuée par nchar . Pour les facteurs de production, nchar entraînera une erreur et vous devrez donc effectuer la conversion en premier lieu, comme vous le montrez.

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