У меня большой фрейм данных (3 миллиона уникальных строк x 3 столбца). Мне нужно подсчитать каждую итерацию фрейма данных, где все три столбца появляются вместе в векторе (20000 строк).Вектор представляет собой объединение множества различных переменных.У меня есть решение, но для запуска требуются часы.Нужны советы по ускорению процесса.Пример:
X1 = c("AAA","ABC","DFD")
X2 = c("123","231","432")
X3 = c("12A","4GJ","213")
x <- data.frame(X1,X2, X3)
y <- c("ABD - 122 - XYZ", "ABC - 231 - 4GJ", "FDD - 213 - FJ2 - djf", "372 - DHFN - SJSN - fjd")
library(data.table)
### My Current Solution
freq <- rep(NA, nrow(x))
for (i in 1:nrow(x)) {
freq[i] <- length(which(y %like% x[i,1] & y %like% x[i,2] & y %like% x[i,3]))
}
### Solution 2
myfunc <- function(x) {freq <- length(which(y %like% x[1] & y %like% x[2] & y %like% x[3]))}
freq <- apply(x[,c(1:3)], 1, myfunc)
### Returns following Vector for both solutions
> freq
[1] 0 1 0
Выполнение этой команды возвращает вектор "freq" с 1-й строкой, содержащей 1, после того как функция нашла все три строки в этой строке вектора.Однако, выполнение этого с 3 миллионами итераций по вектору 200k слишком медленное.Есть идеи?