2014-06-18 3 views
0

의 크기를 두 배로 :R 나는 다음과 같은 데이터 테이블이 데이터 테이블

DT = data.table(
    v1=as.character(rnorm(5)), 
    v2=as.character(rnorm(5)), 
    v3=as.character(rnorm(5)), 
    v4=as.character(rnorm(5)), 
    v5=as.character(rnorm(5)) 
) 

을하고 나는 그것의 열을 복제하여 그 크기를 두 배로합니다.

나는 다음과 같이 진행 :

DT2 <- with(DT, data.table(
    v1=rep(v1,2), 
    v2=rep(v2,2), 
    v3=rep(v3,2), 
    v4=rep(v4,2), 
    v5=rep(v5,2) 
) 

COLNAMES 반복하는 빠른 방법이 있나요?

+3

예는'DT2 <쓸 수 있습니다 - DT [담당자 (1 : 길이 (DT)를, 2) ,] 그리고 그것은 두 번 열을 넘을 것입니다! – konvas

+3

'rbind'ing * DT * 두 번은 어떻습니까? – mlt

+0

흠 나는 내 글을 편집한다 ... 길이가 열의 수를 제공하기 때문에 너는 행운이다 @ konvas ... 내 경우에는 5이고 나는 5 줄도 가지고있다. :) 올바른 구현은'DT2 <- DT [담당자 (1 : nrow (DT), 2),] ' –

답변

2

그 후 당신의 속도라면 ...

microbenchmark(
    rbindlist(list(DT, DT)), 
    DT[rep(1:nrow(DT), 2), ], 
    rbind(DT, DT) 
    ) 

주는 :

     expr  min  lq median  uq  max neval 
    rbindlist(list(DT, DT)) 121.516 126.8520 130.9580 136.9105 353.052 100 
DT[rep(1:nrow(DT), 2), ] 784.102 814.0705 848.7600 957.3445 5709.986 100 
      rbind(DT, DT) 864.976 906.2335 958.5755 1085.6325 1961.897 100 
+1

DT의 행 수가 많은 경우, 5 대신 1e6을 말하면 rbind는 rbindlist (약 1 초)만큼 빠릅니다. 그리고 DT [rep ...] 표현은 다른 두 시간 (약 2 초)보다 두 배나 많은 시간이 걸립니다. –

관련 문제