Выбираем в R строки с одинаковыми индексами из data.table
Это техническая заметка-напоминалка о некоторых возможностях пакета data.table.
Задача
Есть несколько таблиц data.table с данными. Назовем их dt_meta, dt_x, dt_y, dt_area.
В каждой таблице есть колонка the_index.
Из таблицы dt_meta выбираю строки, удовлетворяющие критерию. Например, все строки, в которых значение the_length > 120:
dt_meta[the_length > 120]
Задача заключается в том, чтобы из остальных таблиц выбрать строки с теми же номерами.
Решение
Использую специальный символ .I
.I возвращает номера строк. Но у него есть особенности.
Код
dt_meta[the_length > 120, .I]
вернет последовательные номера строк в новой таблице: 1, 2, 3, ....
Код
dt_meta[, .I[the_length > 120]]
вернет номера строк в исходной таблице: 5, 9, 13, 63, ....
Для решения нужен второй вариант кода. Вот решение.
# Номера строк исходной таблицы, в которых the_length > 120
indexes <- dt_meta[, .I[the_length > 120]]
# Выбираю такие же строки из других таблиц
new_x <- dt_x[indexes]
new_y <- dt_y[indexes]
new_area <- dt_area[indexes]