Cara menemukan panjang string di R

348

Bagaimana menemukan panjang string (jumlah karakter dalam string) tanpa membaginya dalam R? Saya tahu cara menemukan panjang daftar tetapi bukan string.

Dan bagaimana dengan string Unicode? Bagaimana cara menemukan panjang (dalam byte) dan jumlah karakter (rune, simbol) dalam string Unicode?

Pertanyaan terkait:

Igor Chubin
sumber
1
menggunakan evalu () bersama dengan fungsi anonim untuk mengembalikan elemen terakhir | vektor c (8, 4, 0). Fungsi anonim Anda hanya boleh mengambil satu argumen yang seharusnya | menjadi variabel x.
uxi

Jawaban:

417

Lihat ?nchar. Sebagai contoh:

> nchar("foo")
[1] 3
> set.seed(10)
> strn <- paste(sample(LETTERS, 10), collapse = "")
> strn
[1] "NHKPBEFTLY"
> nchar(strn)
[1] 10
Gavin Simpson
sumber
55
Waspadalahnchar(NA)
Hadley
@Hadley Memang, atau dalam hal ini vektor karakter dengan satu atau lebih NAs. (Meskipun ini didokumentasikan demikian).
Gavin Simpson
7
Atau gunakan stri_lengthdari stringi- berfungsi baik dengan NA dan lebih cepat :) Periksa posting saya!
bartektartanus
6
Pada 3.3.1 standar dasar ditetapkan untuk memberikan nchar(NA) ## [1] NA: lihat nchar RDocumentation
leerssej
3
@IgorChubin Anda harus menanyakan ini sebagai pertanyaan baru, bukan mengedit yang hampir 2 tahun.
Gavin Simpson
66

Gunakan stringipaket dan stri_lengthfungsi

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

Mengapa? Karena ini adalah solusi TERCEPAT yang disajikan :)

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

dan juga berfungsi baik dengan NA's

nchar(NA)
## [1] 2
stri_length(NA)
## [1] NA
bartektartanus
sumber
1
Terima kasih atas jawabannya dan untuk perpustakaan yang hebat (ini adalah perpustakaan Anda jika saya memahaminya dengan benar). Bagaimana dengan string Unicode?
Igor Chubin
1
Bekerja dengan baik juga. Lihat contoh ini: stri_length('\u0105') panjangnya satu, tapi ... stri_numbytes('\u0105') 2 byte digunakan
bartektartanus
Ini harus diperbarui karena nchar()sekarang memiliki akun argumen untuk NA:allowNA = FALSE
Riley Finn
26

Anda juga bisa menggunakan stringrpaket:

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

Lihat ini

sobingt
sumber
8

Opsi keepNA = TRUE mencegah masalah dengan NA

nchar(NA)
## [1] 2
nchar(NA, keepNA=TRUE)
## [1] NA
Thomas Buhl
sumber
1
Pada 3.3.1 standar dasar ditetapkan untuk memberikan nchar(NA) ## [1] NA: lihat nchar RDocumentation
leerssej
6
nchar(YOURSTRING)

Anda mungkin perlu mengonversi ke vektor karakter terlebih dahulu;

nchar(as.character(YOURSTRING))
Jonathan
sumber
1
Dengan pengecualian input faktor, paksaan dilakukan oleh nchar. Untuk input faktor, ncharakan menimbulkan kesalahan dan karenanya Anda harus melakukan konversi terlebih dahulu seperti yang Anda tunjukkan.
Gavin Simpson