【问题标题】:Converting slow "WHILE" loop to "apply"-type function将慢速“WHILE”循环转换为“apply”型函数
【发布时间】:2016-06-12 18:00:25
【问题描述】:

我创建了一个在相当大的数据集上执行的 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 分钟后停止时,它仍在运行,而且还远未完成!

我想知道如何在这里使用 apply 系列函数中的一个来替代以更快地完成。

谢谢!

【问题讨论】:

标签: r matrix while-loop apply


【解决方案1】:

大概,

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

为您提供与您想要的类似的东西。

【讨论】:

    【解决方案2】:

    使用库dplyr,您可以执行以下操作(假设您的输入数据框有这样的列名 - 从您的代码/问题中模糊地解释):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-25
      • 2017-06-02
      • 2015-02-16
      • 1970-01-01
      • 2017-02-20
      • 2013-11-03
      • 1970-01-01
      • 2014-12-11
      相关资源
      最近更新 更多