【发布时间】:2014-11-28 20:20:37
【问题描述】:
我在 R 中有一个 270 万行和 22 列的数据框,大小为 388 MB。此数据框包含我想要子集的数据。事实上,我必须将其子集大约 100,000 次。做这个的最好方式是什么。现在我使用数据框,它太慢了。每次迭代大约需要 1 秒。谢谢你。这是玩具代码:
s<-c(100,100,100,800,800,6662,33565,265653262,266532)
p<-c(5,5,5,10,10,10,8,9,10)
name<-c("bob","bob","bob","ed","ed","ed","joe","frank","ted")
time<- as.POSIXct(as.character(c("2014-10-27 18:11:36 PDT","2014-10-27 18:11:37 PDT","2014-10-27 18:11:38 PDT","2014-10-27 18:11:39 PDT","2014-10-27 18:11:40 PDT","2014-10-27 18:11:41 PDT","2014-10-27 19:11:36 PDT","2014-10-27 20:11:36 PDT","2014-10-27 21:11:36 PDT")))
dat<- data.table(s,p,name,time)
dat #here is the data frame in reality it has 2.7 million rows and 22 cols
这里是子集。在这个玩具模型中,我只对子集执行一次,但是 实际上,我有一个循环 100k 次迭代,每次循环 100,5,bob,# 次都会改变
result <- subset(dat, as.numeric(s) == 100
& p == 5
& name == "bob"
& time >= "2014-10-27 18:11:36 PDT"
& time <= "2014-10-27 18:12:00 PDT"
)
result
如何使这个子集更快?我尝试了 data.table() 而不是 data.frame 但它仍然很慢
【问题讨论】:
-
这与your other question 有何不同?为什么你必须子集 100k 次?您是否查看过
splitting 数据?如果您必须对 10 万次进行子集化,那么您可能需要重新考虑您的流程。 -
子集是要求的一部分。拆分数据有什么帮助?
-
要加快速度,请查看 doParallel 包。根据您机器上的内核,您可以显着减少处理时间。如果你愿意,我可以举个例子。
-
@jason 一个例子会很棒。谢谢。
标签: r