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:


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

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

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



6
nchar(YOURSTRING)

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

nchar(as.character(YOURSTRING))

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.