这是我在 StackOverflow 上的第一篇文章。我在编程和尝试使用 R 中的 data.table 方面相对是一个新手,因为它在速度方面享有盛誉。
我有一个非常大的 data.table,名为“Actions”,有 5 列,可能有几百万行。列名是 k1、k2、i、l1 和 l2。我有另一个 data.table,在 k1 和 k2 列中具有 Actions 的唯一值,名为“States”。
对于 Actions 中的每一行,我想找到第 4 列和第 5 列的唯一索引,与 States 匹配。可重现的代码如下:
S.disc <- c(2000,2000)
S.max <- c(6200,2300)
S.min <- c(700,100)
Traces.num <- 3
Class.str <- lapply(1:2,function(x) seq(S.min[x],S.max[x],S.disc[x]))
Class.inf <- seq_len(Traces.num)
Actions <- data.table(expand.grid(Class.inf, Class.str[[2]], Class.str[[1]], Class.str[[2]], Class.str[[1]])[,c(5,4,1,3,2)])
setnames(Actions,c("k1","k2","i","l1","l2"))
States <- unique(Actions[,list(k1,k2,i)])
因此,如果我使用的是 data.frame,以下行将类似于:
index <- apply(Actions,1,function(x) {which((States[,1]==x[4]) & (States[,2]==x[5]))})
我怎样才能有效地对 data.table 做同样的事情?