2014-03-03 50 views
0

說,我們有以下數據表:行和列的索引data.table

> DT1 
    11 12 13 14 
    15 16 17 18 
    19 20 21 22 
    23 24 25 26 
    27 28 29 30 
    31 32 33 34 
    ... 

而這個新的輸出:

> DT2 
    11 12 13 14 15 16 17 18 19 20 21 22 
    23 24 25 26 27 28 29 30 31 32 33 34 
    ... 

我意識到這有data.frame和一個for循環。我怎樣才能用data.table實現它?數據集要大得多,data.frame中的for循環慢一點。

我的循環的一個小例子:

for ... 
    DT2[1,1:4] <- DT1[1,] 
    DT2[1,5:8] <- DT1[2,] 
    DT2[1,9:12] <- DT1[3,] 
    DT2[2,1:4] <- DT1[4,] 
    ... 
end for 

我可以用data.table的改進呢?循環的語法如何?

+0

請澄清你的問題。 data.table是一個實現特定數據結構的包。你在處理data.tables或data.frames嗎?另外,在你的「for for循環」中也沒有索引變量。 – Roland

+0

至於我用data.frames處理它。我嘗試用data.table來改善循環,但我不知道語法是如何。 for循環只是一個例子來證明我在沒有索引的情況下做了什麼。 對不起我englisch :( – Trolli

回答

1

如果dt1所有條目都是同一類型的(無論是數字或字符串或TRUE/FALSE),那麼這將是更容易和更快地重建索引/重塑矩陣做:

dt1 <- matrix(11:34, ncol=4, byrow=TRUE) 
dt1 
#  [,1] [,2] [,3] [,4] 
#[1,] 11 12 13 14 
#[2,] 15 16 17 18 
#[3,] 19 20 21 22 
#[4,] 23 24 25 26 
#[5,] 27 28 29 30 
#[6,] 31 32 33 34 
dt2 <- matrix(as.vector(t(dt1)), ncol=12, byrow=TRUE) 
dt2 
#  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] 
#[1,] 11 12 13 14 15 16 17 18 19 20 21 22 
#[2,] 23 24 25 26 27 28 29 30 31 32 33 34