2016-08-25 3 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/ 데이터 + 표 + 치트 + sheet.pdf)? 또한 "너무 오래"얼마나 걸립니까? – bouncyball

+0

방금이 질문을 찾았습니다. 이유를 이해하지 못합니다. 이 커뮤니티는 점점 더 악화되고 있습니다. 여기에이 [행동] (https://hackernoon.com/the-decline-of-stack-overflow-7cb69faa575d#.2aqn8c7db)에 대해 읽어야 할 좋은 기사가 있습니다. –

답변

12

이 내용은 데이터 테이블과 아무런 관련이 없습니다. 단지 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 
+0

이것은 특별합니다. 나는 내 자신을 보지 못했지만 그것이 무엇인지 궁금하게 만든다. strtrim()은 무엇을 하는가? (멋진 답변입니다.) – Andrie

+4

@Andrie. 같게. 나는 또한 충격을 받았다. 방금'? strtrim'을 확인한 결과, "문자 벡터에 이중 너비 (예 : 중국어/일본어/한국어) 문자가있는 경우 substr '대신이 함수를 사용하는 것이 중요합니다." 그것이 그 답이라고 생각해보십시오. 그걸 확인해 주셔서 고마워요. –

+0

정말 고마워요! –

관련 문제