Cách tìm độ dài của chuỗi trong R


348

Làm thế nào để tìm độ dài của một chuỗi (số ký tự trong một chuỗi) mà không tách nó trong R? Tôi biết cách tìm độ dài của danh sách nhưng không phải là chuỗi.

Còn chuỗi Unicode thì sao? Làm cách nào để tìm độ dài (tính bằng byte) và số lượng ký tự (rune, ký hiệu) trong chuỗi Unicode?

Câu hỏi liên quan:


1
sử dụng đánh giá () cùng với một hàm ẩn danh để trả về phần tử cuối cùng của | vectơ c (8, 4, 0). Hàm ẩn danh của bạn chỉ nên lấy một đối số nên | là một biến x.
uxi

Câu trả lời:


417

Xem ?nchar. Ví dụ:

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

55
Coi chừngnchar(NA)
hadley

@hadley Thật vậy, hoặc đối với vấn đề đó, bất kỳ vectơ ký tự nào có một hoặc nhiều NAs. (Mặc dù điều này được ghi nhận là như vậy).
Gavin Simpson

7
Hoặc sử dụng stri_lengthtừ stringi- nó hoạt động tốt với NA và nó nhanh hơn :) Kiểm tra bài viết của tôi!
bartektartanus

6
Kể từ 3.3.1, các mặc định cơ sở được đặt để cung cấp nchar(NA) ## [1] NA: xem noc RDocumentation
leerssej

3
@IgorChubin bạn nên hỏi câu hỏi này như một câu hỏi mới, không chỉnh sửa câu hỏi gần 2 năm tuổi.
Gavin Simpson

66

Sử dụng stringigói và stri_lengthchức năng

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

Tại sao? Bởi vì nó là NHANH NHẤT trong số các giải pháp được trình bày :)

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

và cũng hoạt động tốt với NA

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

1
Cảm ơn bạn đã trả lời và cho thư viện tuyệt vời (đó là thư viện của bạn nếu tôi hiểu đúng). Còn chuỗi Unicode thì sao?
Igor Chubin

1
Hoạt động tốt quá. Nhìn vào ví dụ này: stri_length('\u0105') độ dài là một, nhưng ... stri_numbytes('\u0105') 2 byte được sử dụng
bartektartanus

Điều này cần được cập nhật vì nchar()hiện có tài khoản đối số cho NA:allowNA = FALSE
Riley Finn

26

Bạn cũng có thể sử dụng stringrgói:

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


8

Tùy chọn keepNA = TRUE ngăn ngừa sự cố với NA

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

1
Kể từ 3.3.1, các mặc định cơ sở được đặt để cung cấp nchar(NA) ## [1] NA: xem noc RDocumentation
leerssej

6
nchar(YOURSTRING)

bạn có thể cần phải chuyển đổi thành một vectơ ký tự trước;

nchar(as.character(YOURSTRING))

1
Ngoại trừ một yếu tố đầu vào, việc ép buộc được thực hiện bởi nchar. Đối với các yếu tố đầu vào, ncharsẽ đưa ra một lỗi và do đó bạn sẽ cần thực hiện chuyển đổi trước khi bạn hiển thị.
Gavin Simpson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.