2012-06-21 17 views
269

आर में विभाजित किए बिना स्ट्रिंग की लंबाई (स्ट्रिंग में वर्णों की संख्या) को कैसे ढूंढें? मुझे पता है कि सूची की लंबाई कैसे प्राप्त करें लेकिन स्ट्रिंग की नहीं।आर में एक स्ट्रिंग की लंबाई कैसे खोजें?

और यूनिकोड तारों के बारे में क्या? मैं यूनिकोड स्ट्रिंग में लंबाई (बाइट्स में) और वर्णों (रन, प्रतीकों) की संख्या कैसे प्राप्त करूं?

संबंधित प्रश्न:

+0

का मूल्यांकन उपयोग करने के साथ समस्याओं से बचाता है() के साथ के अंतिम तत्व को वापस करने के लिए एक अज्ञात फ़ंक्शन के साथ | वेक्टर सी (8, 4, 0)। आपके अज्ञात फ़ंक्शन को केवल एक तर्क लेना चाहिए जो होना चाहिए एक चर 'x' हो। – uxi

उत्तर

316

?nchar देखें। उदाहरण के लिए:

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

'nchar (NA) ' – hadley

+0

@ हैडली वास्तव में, या उस मामले के लिए एक या अधिक' एनए' के ​​साथ किसी भी चरित्र वेक्टर से सावधान रहें। (हालांकि यह ऐसा होने के लिए प्रलेखित है)। –

+6

या 'stringi' से' stri_length' का उपयोग करें - यह एनए के साथ ठीक काम करता है और यह तेज़ है :) मेरी पोस्ट जांचें! – bartektartanus

19

तुम भी stringr पैकेज इस्तेमाल कर सकते हैं:

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

आप एक चरित्र वेक्टर पहले कन्वर्ट करने के लिए आवश्यकता हो सकती है;

nchar(as.character(YOURSTRING)) 
+1

कारक इनपुट के अपवाद के साथ, दबाव 'nchar' द्वारा किया जाता है। कारक इनपुट के लिए, 'nchar' एक त्रुटि फेंक देगा और इसलिए आपको दिखाए जाने पर पहले रूपांतरण करना होगा। –

53

उपयोग 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

उत्तर के लिए और महान पुस्तकालय के लिए धन्यवाद (यदि यह सही है तो यह आपकी लाइब्रेरी है)। यूनिकोड तारों के बारे में क्या? –

+0

भी ठीक काम करता है। इस उदाहरण को देखें: 'stri_length ('\ u0105') 'लंबाई एक है, लेकिन ... 'stri_numbytes ('\ u0105')' 2 बाइट्स का उपयोग – bartektartanus

5

keepNA = सही विकल्प के साथ ठीक काम करता है एनए

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

3.3.1 के रूप में आधार डिफ़ॉल्ट 'nchar (NA) ## [1] NA' देने के लिए सेट हैं: देखें [nchar RDocumentation] (https://www.rdocumentation.org/packages/base/versions/3.3.1/topics/nchar) –