我必須使用2個數據幀200萬條記錄和另外200萬條記錄。我使用了for循環來從另一個獲取數據,但它太慢了。我創建了一個示例來演示我需要做什麼。R中的循環速度太慢
ratings = data.frame(id = c(1,2,2,3,3),
rating = c(1,2,3,4,5),
timestamp = c("2006-11-07 15:33:57","2007-04-22 09:09:16","2010-07-16 19:47:45","2010-07-16 19:47:45","2006-10-29 04:49:05"))
stats = data.frame(primeid = c(1,1,1,2),
period = c(1,2,3,4),
user = c(1,1,2,3),
id = c(1,2,3,2),
timestamp = c("2011-07-01 00:00:00","2011-07-01 00:00:00","2011-07-01 00:00:00","2011-07-01 00:00:00"))
ratings$timestamp = strptime(ratings$timestamp, "%Y-%m-%d %H:%M:%S")
stats$timestamp = strptime(stats$timestamp, "%Y-%m-%d %H:%M:%S")
for (i in(1:nrow(stats)))
{
cat("Processing ",i," ...\r\n")
temp = ratings[ratings$id == stats$id[i],]
stats$idrating[i] = max(temp$rating[temp$timestamp < stats$timestamp[i]])
}
有人能爲我提供一個替代方案嗎?我知道申請可能有效,但我不知道如何翻譯for函數。
更新:感謝您的幫助。我正在提供更多信息。
表格統計信息具有primeid,句點,用戶,id的獨特組合。 表格評分有多個具有不同評分和時間戳記的ID記錄。
我想要做的是以下幾點。對於在統計中找到的每個ID,要在評級表(id列)中查找所有記錄,然後根據從統計獲得的特定時間戳獲取最大評級。
我是很確定這不需要循環。你應該能夠基本上將你定義的「temp」嵌入你想要使用的「rating」的子集中,然後用一個公式完成整個事情。順便說一下,是否可以在'rating $ id'中找到'stats $ id'的每個元素?但一些'ddply'專家會想出一個更好的方法。編輯:在矢量公式中使用'pmax' –
請添加你想要做什麼的描述。從代碼中很難理解。 – Roland
看看'xts'和'zoo'對於這類時間序列數據來說可能也是一個好主意。 –