Подтвердить что ты не робот

Фильтрация данных. Таблица с использованием неравенств и имен переменных столбцов

У меня есть data.table, который я хочу фильтровать на основе некоторых критериев неравенства:

dt <- data.table(A=letters[1:3], B=2:4)
dt
#    A B
# 1: a 2
# 2: b 3
# 3: c 4

dt[B>2]
#    A B
# 1: b 3
# 2: c 4

Вышеупомянутое хорошо работает как решение для векторного сканирования. Но я не могу понять, как объединить это с именами переменных для столбцов:

mycol <- "B"
dt[mycol > 2]
#    A B      // Nothing has changed
# 1: a 2
# 2: b 3
# 3: c 4

Как мне обойти это? Я знаю, что могу использовать двоичный поиск, установив ключи с помощью setkeyv(dt, mycol), но я не вижу способа выполнения двоичного поиска на основе некоторых критериев неравенства.

4b9b3361

Ответ 1

Хорошо, тогда, Используйте get(mycol), потому что вы хотите, чтобы аргумент dt[ был содержимым объекта "mycol". Я считаю, что dt[mycol ...] ищет "mycol" thingie в самом объекте data.table, из которого, конечно, такого животного нет.

Ответ 2

Для этого предусмотрена функция доступа. j оценивается в кадре X, т.е. ваш data.table, если вы не укажете with = FALSE. Это будет канонический способ сделать это.

dt[ , mycol , with = FALSE ]
   B
1: 2
2: 3
3: 4

Столбец возврата, логическое сравнение, строки подмножества...

dt[ c( dt[ , mycol , with = FALSE ] > 2 ) ]

Ответ 3

Другой альтернативой является использование ]] для извлечения B в виде вектора и подмножества, используя это:

dt[dt[[mycol]] > 2]