Cómo encontrar la longitud de una cadena en R

348

¿Cómo encontrar la longitud de una cadena (número de caracteres en una cadena) sin dividirla en R? Sé cómo encontrar la longitud de una lista pero no de una cadena.

¿Y qué hay de las cadenas Unicode? ¿Cómo encuentro la longitud (en bytes) y el número de caracteres (runas, símbolos) en una cadena Unicode?

Pregunta relacionada:

Igor Chubin
fuente
1
usando Evalúe () junto con una función anónima para devolver el último elemento de | el vector c (8, 4, 0). Su función anónima solo debe tomar un argumento que debe | ser una variable x.
uxi

Respuestas:

417

Ver ?nchar. Por ejemplo:

> nchar("foo")
[1] 3
> set.seed(10)
> strn <- paste(sample(LETTERS, 10), collapse = "")
> strn
[1] "NHKPBEFTLY"
> nchar(strn)
[1] 10
Gavin Simpson
fuente
55
Cuidadonchar(NA)
hadley
@hadley De hecho, o de hecho, cualquier vector de caracteres con uno o más NAs. (Aunque esto está documentado para ser así).
Gavin Simpson
77
O use stri_lengthfrom stringi: funciona bien con NA y es más rápido :) ¡Consulte mi publicación!
bartektartanus
66
A partir de 3.3.1, los valores predeterminados básicos están configurados para dar nchar(NA) ## [1] NA: ver nchar RDocumentation
leerssej
3
@IgorChubin, debe hacer esto como una nueva pregunta, no editar una de casi 2 años.
Gavin Simpson
66

Usar stringipaquete y stri_lengthfunción

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

¿Por qué? Porque es la más RÁPIDA entre las soluciones presentadas :)

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

y también funciona bien con NA

nchar(NA)
## [1] 2
stri_length(NA)
## [1] NA
bartektartanus
fuente
1
Gracias por la respuesta y por la gran biblioteca (es su biblioteca si la entendí bien). ¿Qué pasa con las cadenas Unicode?
Igor Chubin
1
Funciona bien también. Mira este ejemplo: la stri_length('\u0105') longitud es una, pero ... stri_numbytes('\u0105') se usan 2 bytes
bartektartanus
Esto debería actualizarse porque nchar()ahora tiene un argumento para las cuentas de NA:allowNA = FALSE
Riley Finn
26

También puedes usar el stringrpaquete:

library(stringr)
str_length("foo")
[1] 3
johannes
fuente
8

La opción keepNA = TRUE evita problemas con NA

nchar(NA)
## [1] 2
nchar(NA, keepNA=TRUE)
## [1] NA
Thomas Buhl
fuente
1
A partir de 3.3.1, los valores predeterminados básicos están configurados para dar nchar(NA) ## [1] NA: ver nchar RDocumentation
leerssej
6
nchar(YOURSTRING)

es posible que primero necesite convertir a un vector de caracteres;

nchar(as.character(YOURSTRING))
Jonathan
fuente
1
Con la excepción de un factor de entrada, la coerción es realizada por nchar. Para las entradas de factores, nchararrojará un error y, por lo tanto, primero deberá realizar la conversión como se muestra.
Gavin Simpson