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関数を変換する方法がわかりません。
更新:助けてくれてありがとう。私はより多くの情報を提供しています。
テーブル統計には、primeid、period、user、idの一意の組み合わせがあります。テーブルの評価には、評価とタイムスタンプが異なる複数のIDレコードがあります。
私がやりたいのは次のとおりです。統計で見つかったIDごとに、評価テーブル(id列)のすべてのレコードを検索し、統計からも取得した特定のタイムスタンプに従って最大評価を取得します。