我想根据元数据中的两个条件制作数据的子集。
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?
非常感谢!
答案 0 :(得分:0)
很难说......但我怀疑你想要的只是简单地完成:
merge(data,metadata)
R中的速度并不快,但优于for
循环。如果事先转换为data.table
并设置密钥,则可以像这样运行merge
,并且它可以非常快速地运行。