2016-08-25 12 views
5

私は約500.000行の大きなデータセットを持っています。それぞれは文字列です。私は固定サイズにすべての行をトリムしたいと思います。Rで長い文字ベクトルをトリムする高速な方法

私はこれが見つかりました:それは時間がかかりすぎるしかし

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

を。より速い方法がありますか?

+3

あなたは '使用していない理由、それは' data.table'にならdata.table' [構文](https://s3.amazonaws.com/assets.datacamp.com/img/blog/データ+テーブル+チート+シート.pdf)?また、どれくらいの時間が「長すぎますか? – bouncyball

+0

私はちょうどこの質問を閉じて見つけた、私は本当に理由を理解していない。このコミュニティはますます悪化しています。ここにこの[行動](https://hackernoon.com/the-decline-of-stack-overflow-7cb69faa575d#.2aqn8c7db)について読む良い記事があります –

答えて

12

data.tableとは関係ありません。ただstrtrim()がかなり遅いです。

中国語/日本語/韓国語以外の文字などの1文字の文字であれば、はるかに高速な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 
+0

これは異常です。私は自分自身を見ていない(私はすべきである)が、それは私がstrtrim()がしていることが何であるのだろうか? (偉大な答えです。) – Andrie

+4

@Andrie。同上。私もショックを受けました。ちょうど '?strtrim'をチェックしたところ、"文字ベクトルにダブル幅(例えば、中国語/日本語/韓国語)の文字がある場合、substrよりもこの関数を使うことは重要です。 "それが答えだと思います。それを確認してくれてありがとう、ありがとう。 –

+0

これはずっと速く働いてくれてありがとう! –

関連する問題