【发布时间】:2016-08-25 18:24:14
【问题描述】:
我有一个包含大约 500.000 行的大数据集。它们中的每一个都是字符串。我想将所有行修剪为固定大小。
我发现了这个:
dt$rev <- strtrim(dt$rev, width=max_len)
但是时间太长了。有更快的方法吗?
【问题讨论】:
我有一个包含大约 500.000 行的大数据集。它们中的每一个都是字符串。我想将所有行修剪为固定大小。
我发现了这个:
dt$rev <- strtrim(dt$rev, width=max_len)
但是时间太长了。有更快的方法吗?
【问题讨论】:
这与 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() 是什么? (很好的答案。)
?strtrim,它指出,“当字符向量中可能存在双宽(例如,中文/日文/韩文)字符时,使用此函数而不是'substr'很重要。”,所以我猜这就是答案。感谢您鼓励我检查一下。