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:


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

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

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



6
nchar(YOURSTRING)

Anda mungkin perlu mengonversi ke vektor karakter terlebih dahulu;

nchar(as.character(YOURSTRING))

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.