Итак, я изучал нюансы 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>
Заранее спасибо замечательному сообществу.