【问题标题】:Faster way to trim a long character vector in R [closed]在 R 中修剪长字符向量的更快方法 [关闭]
【发布时间】:2016-08-25 18:24:14
【问题描述】:

我有一个包含大约 500.000 行的大数据集。它们中的每一个都是字符串。我想将所有行修剪为固定大小。

我发现了这个:

dt$rev <- strtrim(dt$rev, width=max_len)

但是时间太长了。有更快的方法吗?

【问题讨论】:

  • 如果它在data.table 中,你为什么不使用data.table syntax?另外,“过长”是多长时间?
  • 我刚刚发现这个问题已关闭,我真的不明白为什么。这个社区越来越糟糕。这里有一篇很好的文章可以阅读behaviour

标签: r string trim


【解决方案1】:

这与 data.table 无关。只是strtrim()比较慢。

只要您处理的是单角字符(即非中文/日文/韩文等字符),您就可以改用substr(),这样会快得多。

## Make a long character vector with 5 million elements
x <- rep(state.name, 1e5)

## Speed comparison
system.time(substr(x, 1, 3))
#   user  system elapsed 
#   0.43    0.00    0.44 
system.time(strtrim(x, 3))
#   user  system elapsed 
#  44.63    0.03   44.85

## Confirm that both methods return the same output
identical(substr(state.name,1,3), strtrim(state.name,3))
# [1] TRUE

【讨论】:

  • 这很特别。我没有自己看(我应该),但这让我想知道strtrim() 是什么? (很好的答案。)
  • @Andrie。同上。我也很震惊。刚刚检查了?strtrim,它指出,“当字符向量中可能存在双宽(例如,中文/日文/韩文)字符时,使用此函数而不是'substr'很重要。”,所以我猜这就是答案。感谢您鼓励我检查一下。
  • 谢谢你,它工作得更快了!!!
  • @Andrie 看,他们关闭了问题
猜你喜欢
  • 1970-01-01
  • 2015-04-24
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
相关资源
最近更新 更多