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:


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

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

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


8

La opción keepNA = TRUE evita problemas con NA

nchar(NA)
## [1] 2
nchar(NA, keepNA=TRUE)
## [1] NA

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))

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.