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

407

如何在R中计算字符串长度(即字符串中字符的数量)而不拆分它?我知道如何计算列表的长度,但不知道如何计算字符串的长度。

那么对于Unicode字符串呢?如何计算Unicode字符串的字节长度和字符(符文、符号)数量?

相关问题:


1
使用evaluate()和匿名函数来返回向量c(8, 4, 0)的最后一个元素。您的匿名函数应该只有一个参数,即变量“x”。 - uxi
6个回答

490

看看 ?nchar。例如:

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

@hadley确实,或者说任何一个包含一个或多个NA的字符向量。(尽管这已经有记录了)。 - Gavin Simpson
7
或者使用stringi中的stri_length - 它可以很好地处理NA值并且速度更快 :) 查看我的帖子! - bartektartanus
6
截至版本3.3.1,基础默认设置为提供 nchar(NA)

[1] NA` : 请参见nchar RDocumentation

- leerssej
我可以对Unicode字符串使用相同的方法吗?(请参阅更新) - Igor Chubin
3
你应该把这个问题作为一个新问题进行提问,而不是编辑一个将近两年的旧问题。 - Gavin Simpson
@GavinSimpson:在这里提问了:https://dev59.com/8p_ha4cB1Zd3GeqP0Iat - Igor Chubin

76

使用 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

2021年修改

如果您在使用最新版本的R,NA参数将不再有效。


1
谢谢您的回答和出色的库(如果我理解正确,这是您的库)。那Unicode字符串呢? - Igor Chubin
1
也可以正常工作。看这个例子: stri_length('\u0105') 长度为1,但是... stri_numbytes('\u0105') 使用了2个字节 - bartektartanus
这个需要更新,因为nchar()现在有一个参数可以处理NA值:allowNA = FALSE - Riley Finn
1
nchar(NA) 现在是 NA - R 4.0.4 - Rafs
这个回答已经有7年了 ;) 感谢@Jabro,我已经编辑并添加了关于NA的信息。 - bartektartanus

30

你也可以使用 stringr 包:

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

28

13

keepNA = TRUE选项可以避免与NA值相关的问题

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

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

9
nchar(YOURSTRING)

你可能需要先将其转换为字符向量;

nchar(as.character(YOURSTRING))

1
除了因子输入外,强制转换是由nchar执行的。对于因子输入,nchar会抛出错误,因此您需要首先进行转换,如您所示。 - Gavin Simpson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接