Иногда у меня есть ключ data.table
, который я бы хотел подмножить в соответствии с его ключом и не включенным столбцом. Каков самый простой или быстрый способ сделать это?Объединение векторного и двоичного поиска в data.table
Что чувствует себя наиболее естественным является ошибкой:
dt <- data.table(id = 1:100, var = rnorm(100), key = "id")
dt[.(seq(1, 100, 2)) & var > 0, ]
Следующая чистейшая вещь в цепи:
dt[.(seq(1, 100, 2))][var > 0, ]
И, конечно, мы можем угробить используя бинарный поиск на всех (я думаю, что это очевидно, следует избегать):
dt[id %in% seq(1, 100, 2) & var > 0, ]
Есть ли подход, который мне не хватает? Кроме того, любая конкретная причина, по которой первая является ошибкой? Синтаксис кажется мне достаточно ясным.
Я делаю ставку на «чистую» цепочку. Если ваше второе условие является неравенством, я сомневаюсь, что текущая система индексирования может помочь. В настоящее время в условиях равенства есть «автоматическая индексация», но я не уверен в деталях. Он упоминается в новостях: https://github.com/Rdatatable/data.table Если вам нужно сделать 'by = .EACHI' с вашим подмножеством, вам придется переключать цепочку вокруг, я думаю. 'dt [var> 2] [. (seq (1,100,2)), ... do stuff ..., by = .EACHI]' – Frank
см. комментарии [здесь] (http://stackoverflow.com/a/ 29668066/817778) – eddi
так кажется, что ответ действительно зависит от того, что я хочу сделать в 'j', это безопасно сказать? – MichaelChirico