基于元数据表从data.frame / data.table快速获取子集的方法

时间:2014-02-14 11:47:23

标签: r dataframe data.table binary-search

我想根据元数据中的两个条件制作数据的子集。

data= data.frame (w=c(rep ("a", 10),rep("b", 10), rep ("c", 10)), y=(rep(c(1,2,3),10)), v=rnorm (30))
metadata = data.frame (w=c("b","a",),y= c(1,2))

allY <- data.frame ()
mainY <- data.frame ()

for (x in 1:length (data [,1])){
allY <- data.frame (data [which (data$w %in% metadata[x,1]),])
mainY <- data.frame (rbind (mainY, allY [which (allY$y %in% metadata[x,2]),]))
}
mainY

问题是数据和元数据都很大,而且需要花费数小时才能完成。当它完成时我有一个错误:

你知道我怎么能开始这个过程,也许使用data.table?

非常感谢!

1 个答案:

答案 0 :(得分:0)

很难说......但我怀疑你想要的只是简单地完成:

merge(data,metadata)

R中的速度并不快,但优于for循环。如果事先转换为data.table并设置密钥,则可以像这样运行merge,并且它可以非常快速地运行。