Cómo encontrar la longitud de una cadena en R?


¿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é pasa con 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:

Author: Community, 2012-06-21

6 answers

Véase ?nchar. Por ejemplo:

> nchar("foo")
[1] 3
> set.seed(10)
> strn <- paste(sample(LETTERS, 10), collapse = "")
> strn
[1] "NHKPBEFTLY"
> nchar(strn)
[1] 10
 340
Author: Gavin Simpson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-21 09:18:44

Use stringi paquete y stri_length funció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
 55
Author: bartektartanus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-04 16:36:00
nchar("STRING")

Mira esto

 22
Author: sobingt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-21 09:07:41

También puedes usar el paquete stringr:

library(stringr)
str_length("foo")
[1] 3
 20
Author: johannes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-21 09:18:01

La opción keepNA = TRUE evita problemas con NA

nchar(NA)
## [1] 2
nchar(NA, keepNA=TRUE)
## [1] NA
 5
Author: Thomas Buhl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-09 09:48:09
nchar(YOURSTRING)

Es posible que tenga que convertir a un vector de caracteres primero;

nchar(as.character(YOURSTRING))
 4
Author: Jonathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-09 20:40:59