Как выбрать строки в данных.таблица с динамически определяемым именем столбца и ограничениями отсечения?
Я хотел бы написать функцию, которая выбирает строки из таблицы данных, которые попадают в определенный диапазон для динамически именованного столбца. Пытаясь написать это, я обнаружил, что не могу сделать выбор строк, применяя критерии к динамически определяемому столбцу. Вот мои примеры:
Это прекрасно работает:
library(data.table)
dt = data.table(weight=seq(150, 250, 10))
dt[weight < 200]
Как и это:
x = 200
dt[weight < x]
Но это не работает
name = weight
limit = 200
dt[eval(name) < limit]
Каков здесь мой обходной путь?
2 ответа:
Вам нужны две вещи:
- ваша переменная
name
должна быть символьной строкой, как в"weight"
.- вам нужно позвонить
eval(parse(text=name))
, а не простоeval(name)
.Например, с некоторыми поддельными данными:
library(data.table) dt <- data.table(weight=seq(150,250,10)) name <- "weight" limit <- 200 dt[eval(parse(text=name)) < limit] # weight # 1: 150 # 2: 160 # 3: 170 # 4: 180 # 5: 190