2012-06-21 67 views
269

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 chia nhỏ nó trong R? Tôi biết cách tìm chiều dài của một danh sách nhưng không phải là một chuỗi.Cách tìm chiều dài của một chuỗi trong R?

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

Câu hỏi liên quan:

+0

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). Chức năng nặc danh của bạn chỉ nên thực hiện một đối số cần | là một biến 'x'. – uxi

Trả lời

316

Xem ?nchar. Ví dụ:

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

Hãy coi chừng 'nchar (NA)' – hadley

+0

@hadley Thật vậy, hoặc cho rằng bất kỳ vector ký tự nào với một hoặc nhiều 'NA'. (Mặc dù đây là tài liệu được như vậy). –

+6

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

19

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

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

bạn có thể cần phải chuyển đổi sang một vector ký tự đầu tiên;

nchar(as.character(YOURSTRING)) 
+1

Ngoại trừ một yếu tố đầu vào, sự ép buộc được thực hiện bởi 'nchar'. Đối với yếu tố đầu vào, 'nchar' sẽ ném một lỗi và do đó bạn sẽ cần phải thực hiện chuyển đổi đầu tiên khi bạn hiển thị. –

53

Sử dụng stringi gói và stri_length chứ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

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 nó đúng). Điều gì về chuỗi Unicode? –

+0

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

5

Các keepNA = tùy chọn TRUE NA của ngăn chặn vấn đề với NA

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

Kể từ 3.3.1 các giá trị mặc định cơ bản được đặt để cung cấp cho 'nchar (NA) ## [1] NA': xem [nchar RDocumentation] (https://www.rdocumentation.org/packages/base/versions/3.3.1/topics/nchar) –

Các vấn đề liên quan