Подмножество с data.table с использованием ключа в R - PullRequest
3 голосов
/ 10 апреля 2020

Итак, я изучал нюансы data.table примерно неделю. В настоящее время я практикуюсь на mtcars данных. Конвертируется в таблицу данных следующим образом:

dt<-data.table(mtcars)

Я хочу выделить строки, где disp> 300 и wt <5. Я могу сделать это в <strong>'i' следующим образом:

dt[disp>300 & wt<5]
    mpg cyl disp  hp drat    wt  qsec vs AM gear carb
1: 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
2: 14.3   8  360 245 3.21 3.570 15.84  0  0    3    4
3: 15.5   8  318 150 2.76 3.520 16.87  0  0    3    2
4: 15.2   8  304 150 3.15 3.435 17.30  0  0    3    2
5: 13.3   8  350 245 3.73 3.840 15.41  0  0    3    4
6: 19.2   8  400 175 3.08 3.845 17.05  0  0    3    2
7: 15.8   8  351 264 4.22 3.170 14.50  0  1    5    4
8: 15.0   8  301 335 3.54 3.570 14.60  0  1    5    8

Однако сейчас я немного одержим клавишами, поэтому я пытался сделать то же самое используя ключи.

setkeyv(dt,c('disp','wt'))

dt[.(>300,<5)]

Это выдает сообщение об ошибке: Error: unexpected '>' in "dt[.(>"

Я попробовал другой метод (для этого не требовался ключ, поэтому я удалил их), который тоже дал то же самое ошибка.

dt[.(>300,<5),on=.('disp','wt')]

Error: unexpected '>' in "dt[.(>"

Хотя я могу без проблем выполнить следующее, так как у них нет логического оператора:

Использование ключей: dt[.(145,2.77)]
Без использования ключей: dt[.(145,2.77),on=c('disp','wt')]

Поэтому мой вопрос таков: как подмножество строк, используя метод ключа, а также с помощью on (не требует ключа), когда критерии подмножества имеют логический оператор (например, .>, <,> =, <=)? </p>

Заранее спасибо замечательному сообществу.

...