วิธีค้นหาความยาวของสตริงใน R


348

วิธีค้นหาความยาวของสตริง (จำนวนอักขระในสตริง) โดยไม่แยกใน R? ฉันรู้วิธีค้นหาความยาวของรายการ แต่ไม่ใช่ของสตริง

แล้วสตริง Unicode ล่ะ? ฉันจะค้นหาความยาว (เป็นไบต์) และจำนวนอักขระ (อักษรรูน, สัญลักษณ์) ในสตริง Unicode ได้อย่างไร

คำถามที่เกี่ยวข้อง:


1
ใช้ประเมิน () พร้อมกับฟังก์ชั่นที่ไม่ระบุชื่อเพื่อกลับองค์ประกอบสุดท้ายของ | เวกเตอร์ c (8, 4, 0) ฟังก์ชั่นที่ไม่ระบุชื่อของคุณควรรับหนึ่งอาร์กิวเมนต์ xเป็นตัวแปร
อู๋ซี

คำตอบ:


417

?ncharดู ตัวอย่างเช่น:

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

55
ระวังnchar(NA)
hadley

@hadley แน่นอนหรือสำหรับเรื่องนั้นเวกเตอร์อักขระใด ๆ ที่มีอย่างน้อยหนึ่งNAตัว (แม้ว่าเอกสารนี้จะเป็นเช่นนั้น)
Gavin Simpson

7
หรือใช้stri_lengthจากstringi- ทำงานได้ดีกับ NA's และเร็วขึ้น :) ตรวจสอบโพสต์ของฉัน!
bartektartanus

6
ตั้งแต่ 3.3.1 ค่าเริ่มต้นพื้นฐานจะถูกกำหนดเป็นnchar(NA) ## [1] NA: ดูnchar RDocumentation
leerssej

3
@IgorChubin คุณควรถามคำถามนี้เป็นคำถามใหม่ไม่ใช่แก้ไขด้วยอายุเกือบ 2 ปี
Gavin Simpson

66

ใช้stringiแพ็คเกจและstri_lengthฟังก์ชั่น

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

ทำไม? เพราะเร็วที่สุดในบรรดาโซลูชันที่นำเสนอ :)

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

และทำงานได้ดีกับของนา

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

1
ขอบคุณสำหรับคำตอบและห้องสมุดที่ยอดเยี่ยม (เป็นห้องสมุดของคุณถ้าฉันเข้าใจถูกต้อง) สิ่งที่เกี่ยวกับสาย Unicode?
Igor Chubin

1
ทำงานได้ดีเช่นกัน ดูตัวอย่างนี้: stri_length('\u0105') length is one แต่ ... ใช้stri_numbytes('\u0105') 2 ไบต์
bartektartanus

สิ่งนี้ควรได้รับการอัปเดตเพราะnchar()ขณะนี้มีบัญชีอาร์กิวเมนต์สำหรับ NA:allowNA = FALSE
Riley Finn




6
nchar(YOURSTRING)

คุณอาจต้องแปลงเป็นเวกเตอร์อักขระก่อน

nchar(as.character(YOURSTRING))

1
ncharด้วยข้อยกเว้นของการป้อนข้อมูลปัจจัยที่ข่มขู่จะดำเนินการโดย สำหรับปัจจัยปัจจัยncharจะทำให้เกิดข้อผิดพลาดและด้วยเหตุนี้คุณจะต้องทำการแปลงก่อนตามที่คุณแสดง
กาวินซิมป์สัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.