2014-03-03 58 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