2016-02-29 34 views
-1

我创建了一个while循环,该循环正在跨越一个可调整的数据集执行。环路是这样:将缓慢的“WHILE”循环转换为“应用”型函数

i = 1 
while(i<=m){ 
    Date = London.Events$start_time[i] 
    j=1 
    while(j<=n){ 
    Hotel = London.Hotels$AS400.ID[j] 
    Day.Zero[i,j] = sum(London.Bookings$No.of.Rooms[London.Bookings$Stay.Date == Date & London.Bookings$Legacy.Hotel.Code == Hotel]) 
    j=j+1 
    } 
i=i+1 
} 

其中:

m = 9957 #Number of Events 
n = 814 #Number of Hotels 

Day.Zero = as.data.frame(matrix(0, 9957, 814)) 

简言之解释的,对于日期和酒店(来自两个其他数据帧拉动)的每一种组合,从柱London.Bookings$No.of.Rooms和存款产生的总和那到矩阵的相应的行。

循环似乎运行没有错误,但是当它在5分钟后停止+它仍然在运行并且远远没有完成!

我想知道如何应用功能家族中的一个功能可以作为更快的完成替代。

谢谢!

+5

示例数据集在这里真的很有用。请参阅[如何编写一个很好的R可重现示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – C8H10N4O2

回答

0

利用图书馆dplyr,你可以这样做以下(假设你的输入数据帧,例如列名 - 依稀从您的代码/问题的解释):

library(dplyr) 
London.Bookings %>% group_by(Legacy.Hotel.Code, Stay.Date) %>% summarise(Total.No.of.Rooms = sum(No.of.Rooms)) 
1

也许,

xtabs(No.of.Rooms ~ Stay.Date + Legacy.Hotel, data = London.Bookings) 

可以获得类似于你想要的东西。