如何在R中找到字符串的长度


348

如何查找字符串的长度(字符串中的字符数)而不用R拆分?我知道如何找到列表的长度而不是字符串的长度。

Unicode字符串呢?如何找到Unicode字符串的长度(以字节为单位)和字符数(符文,符号)?

相关问题:


1
使用评估()和匿名函数返回|的最后一个元素 向量c(8,4,0)。您的匿名函数应仅接受一个参数,该参数应| 成为变量x
uxi

Answers:


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 2014年

@hadley的确如此,或者与此有关的任何具有一个或多个NAs的字符向量。(尽管据记录如此)。
加文·辛普森

7
或使用stri_lengthstringi-它正常工作与NA的,这是更快的:)检查我的帖子!
bartektartanus 2014年

6
从3.3.1版开始,基本默认值设置为nchar(NA) ## [1] NA:参见nchar RDocumentation
leerssej

3
@IgorChubin您应该将其作为一个新问题提出,而不要编辑一个将近2年的问题。
加文·辛普森

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

并且还可以与NA一起使用

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

1
感谢您的回答和出色的图书馆(如果我理解正确的话,那就是您的图书馆)。Unicode字符串呢?
伊戈尔·朱宾

1
也可以。看这个例子:stri_length('\u0105') length是1,但是...使用stri_numbytes('\u0105') 2个字节
bartektartanus

这应该进行更新,因为nchar()现在有一个参数说明了NA:allowNA = FALSE
Riley Finn

26

您还可以使用该stringr软件包:

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



6
nchar(YOURSTRING)

您可能需要先转换为字符向量;

nchar(as.character(YOURSTRING))

1
除因子输入外,强制由执行nchar。对于因子输入,nchar将引发错误,因此您将需要按照显示的步骤先进行转换。
加文·辛普森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.