在R中修剪长字符向量的更快方法

hoa*_*oid 6 string r trim

我有一个大约500.000行的大数据集.他们每个人都是字符串.我想将所有行修剪为固定大小.

我找到了这个:

dt$rev <- strtrim(dt$rev, width=max_len)
Run Code Online (Sandbox Code Playgroud)

但是这需要太长时间.有更快的方法吗?

Jos*_*ien 12

这与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
Run Code Online (Sandbox Code Playgroud)

  • @Andrie.同上.我也很震惊.刚刚检查了`?strtrim`,它注意到,"当字符向量中可能有双宽度(例如,中文/日文/韩文)字符时,使用此函数而不是'substr'很重要.",所以我猜猜这就是答案.谢谢你刺激我检查一下. (4认同)