如何提高性能:循环为一个因素的每个级别(在R)

问题描述:

我发现它非常缓慢循环的因素的每个级别。如何提高性能:循环为一个因素的每个级别(在R)

的数据是部分列车的时间表:

col1  col2  col3  col4   col5 
train start  density starttime  arrivaltime 
[factor] [factor] [factor] [date&time] [date&time] 

有10米行。有大约1K列车,所以每列列车都有10K列。

我尝试下面的测试代码:

data = data[order(data$train, data$starttime), ] # sort according to train, and then according to starttime 
length1 = numeric(length(levels(data$train)) ) 
ii = 1 
sub = data[1,] # initialize it   
for (t in levels(data$train)) 
{ 
    sub = subset(data, train==t) #subset of each train 
    length1[ii] = nrow(sub) 
    ii = ii +1 
    print(ii) 
} 

它的工作原理很慢 - 几秒钟,我的笔记本电脑每个循环。我想知道我能做些什么来提高效率。

例如,sub是在每个循环中变化的变量。我应该避免将这些行复制到subsub更改循环时的长度,初始化时我应该给它更大的内存空间吗?

ps 我真正想要做的是,对于每一列火车,如果命运城市==下一趟旅行的开始城市。代码是:

data = data[order(data$train, data$starttime), ] # sort according to train, and then according to starttime 
sub = data[1,] # initialization   
for (t in levels(data$train)) 
{ 
    sub = subset(data, train==t) #subset of each train 

    for (i in 1:(nrow(sub)-1) ) 
    { 
    if (as.character(sub$destiny[i]) != as.character(sub$start[i+1])) 
    # if the destiny != the start city of the next trip 
    { do something } 
    } 
} 
+0

对于你的问题的第一部分,一个简单的'表(数据$列车)'就足以知道每个列车级多少行了。 – nicola 2014-10-20 08:32:31

+0

谢谢@koundy!我试过了 - 速度更快!(虽然不是data.table手册中提到的1000倍速度 - 有人说data.table和dplyr在性能上相当) – 2014-10-20 09:25:17

+0

如果它解决了你的问题,请接受我的答案.. :-) – Koundy 2014-10-20 09:30:25