我必须使用 2 个数据框 200 万条记录和另外 200 万条记录。我使用了一个 for 循环来相互获取数据,但它太慢了。我创建了一个示例来演示我需要做什么。
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]])
}
有人可以为我提供替代方案吗?我知道 apply 可能有效,但我不知道如何翻译 for 函数。
更新:感谢您的帮助。我正在提供更多信息。
表 stats 具有 primeid、period、user、id 的独特组合。表 rating 有多个不同等级和时间戳的 id 记录。
我想做的是以下。对于在 stats 中找到的每个 id,查找评级表(id 列)中的所有记录,然后根据也从 stats 获得的特定时间戳获取最大评级。