【问题标题】:How to find the length of a string in R如何在R中找到字符串的长度
【发布时间】:2012-06-23 11:45:49
【问题描述】:

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

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

相关问题:

【问题讨论】:

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

标签: r string unicode string-length


【解决方案1】:

?nchar。例如:

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

【讨论】:

  • @hadley 确实如此,或者就此而言,任何具有一个或多个 NAs 的字符向量。 (尽管有文件证明是这样的)。
  • 或者使用stringi 中的stri_length - 它适用于 NA,而且速度更快 :) 检查我的帖子!
  • 从 3.3.1 开始,基本默认设置为 nchar(NA) ## [1] NA :参见 nchar RDocumentation
  • 我可以对 Unicode 字符串使用相同的方法吗? (见更新)
  • @IgorChubin 您应该将此作为一个新问题提出,而不是编辑一个将近 2 岁的问题。
【解决方案2】:

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

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

编辑 2021

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

【讨论】:

  • 感谢您的回答和伟大的图书馆(如果我理解正确,它就是您的图书馆)。 Unicode 字符串呢?
  • 也可以。看这个例子:stri_length('\u0105') 长度为 1,但是……stri_numbytes('\u0105') 使用了 2 个字节
  • 这应该被更新,因为nchar() 现在有一个用于 NA 的参数:allowNA = FALSE
  • nchar(NA) 现在是NA - R 4.0.4
  • 这个答案已有 7 年历史;)谢谢@Jabro,我已对其进行了编辑并添加了有关 NA 的信息。
【解决方案3】:

您也可以使用stringr 包:

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

【讨论】:

    【解决方案4】:
    nchar("STRING")
    

    查看this

    【讨论】:

      【解决方案5】:

      keepNA = TRUE 选项可防止 NA 出现问题

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

      【讨论】:

      【解决方案6】:
      nchar(YOURSTRING)
      

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

      nchar(as.character(YOURSTRING))
      

      【讨论】:

      • 除因子输入外,强制由nchar 执行。对于因子输入,nchar 将引发错误,因此您需要先进行转换。
      猜你喜欢
      • 2022-12-28
      • 2010-11-22
      • 1970-01-01
      • 2021-06-01
      • 2013-01-12
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      相关资源
      最近更新 更多