Как найти длину строки (количество символов в строке) без разделения ее на R? Я знаю, как найти длину списка, но не строки.
А как насчет строк Unicode? Как найти длину (в байтах) и количество символов (руны, символы) в строке Unicode?
Связанный с нами вопрос:
См. ?nchar
. Например:
> nchar("foo")
[1] 3
> set.seed(10)
> strn <- paste(sample(LETTERS, 10), collapse = "")
> strn
[1] "NHKPBEFTLY"
> nchar(strn)
[1] 10
nchar(NA)
NA
. (Хотя это задокументировано так).
Используйте 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
а также отлично работает с NA
nchar(NA)
## [1] 2
stri_length(NA)
## [1] NA
stri_length('\u0105')
равна единице, но ... используется stri_numbytes('\u0105')
2 байта
nchar("STRING")
Отъезд this
Вы также можете использовать пакет stringr
:
library(stringr)
str_length("foo")
[1] 3
Параметр keepNA = TRUE предотвращает проблемы с NA
nchar(NA)
## [1] 2
nchar(NA, keepNA=TRUE)
## [1] NA
nchar(NA) ## [1] NA
: см. Nchar RDocumentation
nchar(YOURSTRING)
вам может потребоваться сначала преобразовать в вектор символа;
nchar(as.character(YOURSTRING))
nchar
. Для факторных входов nchar
выдаст ошибку и, следовательно, сначала вам нужно будет выполнить преобразование, как вы показываете.
x
.