【发布时间】:2012-06-05 09:03:21
【问题描述】:
我有两个数据框(db1 和db2),我想在db2 中获得与db1 中的某些参数匹配的位置。这可以使用for 循环来实现,如下所示:
db1 <- data.frame(id=rep(1:4,each=4),
class=sample(1:10, 16, replace=TRUE),
var=rnorm(16)
)
db2 <- expand.grid(id=1:4, class=1:10)
db2$x <- rnorm(nrow(db2))
for(i in 1:nrow(db1)) print(which(db2$id==db1$id[i] & db2$class==db1$class[i]))
但是循环非常低效,所以我想对这个循环进行矢量化。可以将向量传递给which() 函数,以便该函数在 db2 中搜索 db1 中的每个值?
【问题讨论】:
-
拥有这些职位后,您想如何处理这些职位?换句话说;有没有比上面最初的要求更大的目的?顺便说一句,如果您通过为结果对象分配存储空间并在循环时填充该对象来正确设置循环,那么循环在 R 中并不是低效的。
-
获得位置后,我的目的是从
db2中收集位置(+/- n 个位置)周围的一系列数据,并将它们添加到db1数据集中。我认为我的实际问题是db1(3x10^6 obs) 和db2(1x10^6 obs) 都很大。
标签: r vectorization data.table