jas*_*n K 6 loops r vectorization
全部,我是R.的新手
我有两个面板数据文件,列"id","date"和"ret"
文件A比文件B有更多的数据,但我主要使用文件B数据.
"id"和"date"的组合是unqiue标识符.
是否有一种在B中查找每个(id,date)的优雅方式,我需要从文件A中获取过去10天,然后将它们存回B中?
我天真的做法是循环B中的所有行,
for i in 1:length(B) {
B$past10d[i] <- prod(1+A$ret[which(A$id == B$id[i] & A$date > B$date[i]-10 & A$date < B$date[i])])-1
}
Run Code Online (Sandbox Code Playgroud)
但循环需要永远.
真的很感激你的想法.
非常感谢你.
这更快吗?(我假设 B$id 和 B$date 的组合是一个唯一标识符,不会在任何地方复制 - 由您的代码暗示)
B$idDate <- factor(B$id):factor(B$date)
B$past10 <- sapply(B$idDate, function(x){with(B[B$idDate == x,],
prod(1+A$ret[A$id == id & A$date > date-10 & A$date < date])-1)})
Run Code Online (Sandbox Code Playgroud)