So ermitteln Sie die Länge eines Strings in R.

348

Wie finde ich die Länge einer Zeichenfolge (Anzahl der Zeichen in einer Zeichenfolge), ohne sie in R aufzuteilen? Ich weiß, wie man die Länge einer Liste findet, aber nicht einer Zeichenfolge.

Und was ist mit Unicode-Strings? Wie finde ich die Länge (in Bytes) und die Anzahl der Zeichen (Runen, Symbole) in einer Unicode-Zeichenfolge?

Verwandte Frage:

Igor Chubin
quelle
1
Verwenden von evalu () zusammen mit einer anonymen Funktion, um das letzte Element von | zurückzugeben der Vektor c (8, 4, 0). Ihre anonyme Funktion sollte nur ein Argument annehmen, das | sollte eine Variable sein x.
Uxi

Antworten:

417

Siehe ?nchar. Zum Beispiel:

> nchar("foo")
[1] 3
> set.seed(10)
> strn <- paste(sample(LETTERS, 10), collapse = "")
> strn
[1] "NHKPBEFTLY"
> nchar(strn)
[1] 10
Gavin Simpson
quelle
55
Vorsichtnchar(NA)
Hadley
@hadley In der Tat oder für jeden anderen Zeichenvektor mit einem oder mehreren NAs. (Obwohl dies dokumentiert ist).
Gavin Simpson
7
Oder verwenden Sie stri_lengthvon stringi- es funktioniert gut mit NAs und es ist schneller :) Überprüfen Sie meinen Beitrag!
Bartektartanus
6
Ab 3.3.1 sind die Basisstandards nchar(NA) ## [1] NAwie folgt festgelegt
leerssej
3
@IgorChubin Sie sollten dies als neue Frage stellen, nicht eine fast 2 Jahre alte bearbeiten.
Gavin Simpson
66

Verwenden Sie stringiPaket und stri_lengthFunktion

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

Warum? Weil es das SCHNELLSTE unter den vorgestellten Lösungen ist :)

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

und funktioniert auch gut mit NAs

nchar(NA)
## [1] 2
stri_length(NA)
## [1] NA
Bartektartanus
quelle
1
Vielen Dank für die Antwort und für die großartige Bibliothek (es ist Ihre Bibliothek, wenn ich es richtig verstanden habe). Was ist mit Unicode-Strings?
Igor Chubin
1
Funktioniert auch gut. Schauen Sie sich dieses Beispiel an: stri_length('\u0105') Länge ist eins, aber ... stri_numbytes('\u0105') 2 Bytes werden verwendet
bartektartanus
Dies sollte aktualisiert werden, da nchar()jetzt ein Argument für NAs vorliegt:allowNA = FALSE
Riley Finn
26

Sie können auch das stringrPaket verwenden:

library(stringr)
str_length("foo")
[1] 3
johannes
quelle
25
nchar("STRING")

Überprüfen Sie dies

schluchzend
quelle
8

Die Option keepNA = TRUE verhindert Probleme mit NA

nchar(NA)
## [1] 2
nchar(NA, keepNA=TRUE)
## [1] NA
Thomas Buhl
quelle
1
Ab 3.3.1 sind die Basisstandards nchar(NA) ## [1] NAwie folgt festgelegt
leerssej
6
nchar(YOURSTRING)

Möglicherweise müssen Sie zuerst in einen Zeichenvektor konvertieren.

nchar(as.character(YOURSTRING))
Jonathan
quelle
1
Mit Ausnahme einer Faktoreingabe wird der Zwang von ausgeführt nchar. Bei Faktoreingaben ncharwird ein Fehler ausgegeben, und daher müssen Sie zuerst die Konvertierung durchführen, wie Sie zeigen.
Gavin Simpson