У меня есть довольно большой data.table (500 x 2000), и мне нужно выяснить, являются ли какие-либо из столбцов дублирующими, т. Е. Имеют одинаковые значения для всех строк. Есть ли способ эффективно сделать это в структуре data.table?Поиск дубликатов столбцов в таблице данных.
Я пробовал наивный двухпозиционный подход с all(col1 == col2)
для каждой пары столбцов, но это занимает слишком много времени. Я также попытался преобразовать его в data.frame и использовать вышеупомянутый подход, и это все еще занимает довольно много времени.
Мое текущее решение заключается в преобразовании data.table в матрицу и использовать функцию apply()
как:
similarity.matrix <- apply(m, 2, function(x) colSums(x == m)))/nrow(m)
Однако подход заставляет режимы всех элементов, то же самое, и я бы скорее, этого не произойдет. Какие у меня есть другие варианты?
Вот строительный образец для data.table:
m = matrix(sample(1:10, size=1000000, replace=TRUE), nrow=500, ncol=2000)
DF = as.data.frame(m)
DT = as.data.table(m)
Вы принимаете ложные срабатывания в результате, я имею в виду, вы проверяете, возможно, дублированные столбцы вручную? Я мог представить себе вычисление одного хэша на столбец, и одно и то же значение хэша указывает на возможные дубликаты. –
Почему бы не использовать 'duplicated()'? – Haboryme
Спасибо за отзыв! duplicated() творит чудеса. Это намного быстрее, чем мой неудобный подход. – Naumz