Я пытаюсь сделать что-то подобное, как здесь:
R - индексы совпадения значений двух data.tables
Вот оригинальный воспроизводимый пример из вопроса выше:
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)])
Как начинающий R, я пытаюсь расширить этот пример для всех столбцов.
В моем случае мой первый data.table содержит 60 столбцов и 2,2 миллиона строк , Второй файл data.table является подмножеством первого, то есть он имеет такое же количество столбцов = 60, но гораздо меньше строк = 0,1 миллиона.
В конце я хотел бы иметь вектор с длиной data.table one = 2,2 миллиона, со значением TRUE, если строка одинаково существует где-то в data.table два, в противном случае FALSE.
Я сделал для l oop, но он крайне неэффективен и занимает несколько часов:
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 <- as.data.table(sample_n(Actions, 10))
idx_filter <- rep(NA,dim(Actions)[1])
for (a in 1:dim(Actions)[1]){
for (b in 1:nrow(States))
if (sum(Actions[a,] == States[b,]) == ncol(Actions)) { idx_filter[a] <- T }
}
idx_filter[is.na(idx_filter)] <- F
Как я могу сделать то же самое с data.table эффективно?