2016-02-29 72 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) 

可以獲得類似於你想要的東西。