更快的数据子集化。

时间:2016-03-24 18:50:23

标签: r data.table

我有一个数据表" d"我目前正在这样进行分组:

   d[d$time >= as.POSIXct("2016-01-01 00:31:13",tz="GMT") & d$category =="b" & num1==8 & num2>=4 & num3 ==7, ]

对数据表的行进行子集化的最快方法是什么?这可以更快吗?

谢谢。

以下是代码:

 times= as.POSIXct("2016-01-01",tz="GMT")+seq(1,2000,by = 1)
d =data.table(time= times,  category1 = rep(c("a","b"),1000), num1=rep(c(2,8),1000), num2=rep(c(3,4),1000), num3=rep(c(5,7),1000))
setkey(d,time)#    
d[d$time >= as.POSIXct("2016-01-01 00:31:13",tz="GMT") & d$category =="b" & num1==8 & num2>=4 & num3 ==7, ]

1 个答案:

答案 0 :(得分:0)

假设您已经制定的一般方法是您想要做的,您可以通过链接&条件来提高速度,而不是通过一次调用{{1 }}。 [.data.table条件越多,您获得的改进就越多。

&

注意:从逻辑上讲,这不符合或library(data.table) # Create a big table to play with set.seed(1987) n <- 1e7 myDT <- data.table(X = sample(LETTERS, n, replace = TRUE), Y = sample(1:1000, n, replace = TRUE), Z = sample(1:1000, n, replace = TRUE)) myDT # 10 million rows system.time(myDT[X %in% c("R", "S", "G") & Y <= 30 & Z >= 500]) #0.86s system.time(myDT[X %in% c("R", "S", "G")][Y <= 30][Z >= 500]) #0.19s 条件。