Як знайти довжину рядка в R


348

Як знайти довжину рядка (кількість символів у рядку), не розділяючи її на R? Я знаю, як знайти довжину списку, але не рядок.

А як щодо рядків Unicode? Як знайти довжину (у байтах) та кількість символів (руни, символи) у рядку Unicode?

Питання, пов'язані з цим:


1
використовуючи оцінку () разом з анонімною функцією для повернення останнього елемента | вектор c (8, 4, 0). Ваша анонімна функція повинна приймати лише один аргумент, який повинен | бути змінною x.
uxi

Відповіді:


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 Дійсно, або з цього приводу будь-який вектор символів з одним або декількома NAs. (Хоча це документально підтверджено).
Гевін Сімпсон

7
Або використовувати stri_lengthз stringi- це чудово працює з NA, і це швидше :) Перевірте мій пост!
bartektartanus

6
Станом на 3.3.1 базові параметри за замовчуванням встановлюються так nchar(NA) ## [1] NA: див. Nchar RDocumentation
leerssej

3
@IgorChubin, ви повинні ставити це як нове запитання, а не редагувати майже дворічне.
Гевін Сімпсон,

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?
Ігор Чубін

1
Також добре працює. Подивіться на цей приклад: stri_length('\u0105') довжина одна, але ... stri_numbytes('\u0105') вживаються 2 байти
bartektartanus

Це має бути оновлено, оскільки nchar()тепер є аргументи для НС:allowNA = FALSE
Райлі Фін

26

Ви також можете використовувати stringrпакет:

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


8

Параметр KeepNA = TRUE запобігає виникненню проблем з NA

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

1
Станом на 3.3.1 базові параметри за замовчуванням встановлюються так nchar(NA) ## [1] NA: див. Nchar RDocumentation
leerssej

6
nchar(YOURSTRING)

вам може знадобитися спочатку перетворити на векторний символ;

nchar(as.character(YOURSTRING))

1
За винятком факторного введення, примус виконує nchar. Що стосується факторних входів, ncharвиникла помилка, а значить, вам потрібно буде виконати перетворення спочатку, як показуєте.
Гевін Сімпсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.