Come trovare la lunghezza di una stringa in R


348

Come trovare la lunghezza di una stringa (numero di caratteri in una stringa) senza dividerla in R? So come trovare la lunghezza di un elenco ma non di una stringa.

E le stringhe Unicode? Come trovo la lunghezza (in byte) e il numero di caratteri (rune, simboli) in una stringa Unicode?

Domanda correlata:


1
usando assess () insieme a una funzione anonima per restituire l'ultimo elemento di | il vettore c (8, 4, 0). La tua funzione anonima dovrebbe prendere solo un argomento che dovrebbe | essere una variabile x.
uxi

Risposte:


417

Vedere ?nchar. Per esempio:

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

55
Attenzionenchar(NA)
Hadley,

@hadley In effetti, o del resto qualsiasi carattere vettoriale con una o più NAs. (Anche se questo è documentato per essere così).
Gavin Simpson,

7
Oppure usa stri_lengthda stringi- funziona benissimo con NA ed è più veloce :) Controlla il mio post!
Bartektartanus,

6
A partire dalla 3.3.1 i valori di default di base sono impostati per dare nchar(NA) ## [1] NA: vedi nchar RDocumentation
leerssej

3
@IgorChubin dovresti porlo come una nuova domanda, non modificarne una di quasi 2 anni.
Gavin Simpson,

66

Usa stringipacchetto e stri_lengthfunzione

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

Perché? Perché è la più veloce tra le soluzioni presentate :)

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

e funziona anche bene con NA

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

1
Grazie per la risposta e per la grande biblioteca (è la tua biblioteca se la capissi bene). Che dire delle stringhe Unicode?
Igor Chubin,

1
Funziona bene anche. Guarda questo esempio: la stri_length('\u0105') lunghezza è una, ma ... stri_numbytes('\u0105') 2 byte sono usati
bartektartanus

Questo dovrebbe essere aggiornato perché nchar()ora ha una spiegazione per conto di NA:allowNA = FALSE
Riley Finn

26

Puoi anche usare il stringrpacchetto:

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


8

L'opzione keepNA = TRUE previene i problemi con NA

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

1
A partire dal 3.3.1 i valori di default di base sono impostati per dare nchar(NA) ## [1] NA: vedi nchar RDocumentation
leerssej

6
nchar(YOURSTRING)

potrebbe essere necessario convertire prima in un vettore di caratteri;

nchar(as.character(YOURSTRING))

1
Con l'eccezione di un fattore di input, la coercizione viene eseguita da nchar. Per gli input dei fattori, ncharverrà generato un errore e quindi sarà necessario eseguire prima la conversione come mostrato.
Gavin Simpson
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.