Моя цель - найти индексы строк матрицы (dat
), которые содержат совпадающие строки другой матрицы (xy
).
Мне легко сделать это с помощью меньших матриц, как показано в примерах.Но у матриц у меня очень большое количество строк.
Для примера игрушек матрицы dat
и xy
приведены ниже.Цель состоит в том, чтобы восстановить индексы 14, 58, 99. В моем случае обе эти матрицы имеют очень большое количество строк.
# toy data
dat <- iris
dat$Sepal.Length <- dat$Sepal.Length * (1 + runif(150))
xy <- dat[c(14, 58, 99), c(1, 5)]
Для небольших матриц решения будутбыть
# solution 1
ind <- NULL
for(j in 1 : length(x)) {
ind[j] <- which((dat$Sepal.Length ==xy[j, 1]) & (dat$Species == xy[j, 2]))
}
или
# solution 2
which(outer(dat$Sepal.Length, xy[, 1], "==") &
outer(dat$Species, xy[, 2], "=="), arr.ind=TRUE)
Но, учитывая размер моих данных, эти методы не осуществимы.Первый метод занимает много времени, а другой не работает из-за нехватки памяти.
Хотелось бы узнать больше data.table
и dplyr
.