data.table эквивалент dplyr ::% в% с использованием! (не) оператор - PullRequest
1 голос
/ 20 февраля 2020

Существует ли эквивалентная версия следующего кода в синтаксисе пакета data.table в R?

следующая строка кода фильтрует набор данных mtcars для строк, которые не содержат значения цил в наборе (4,6)

В dplyr этот код выглядит следующим образом:

mtcars %>% filter(!(cyl %in% c(4,6)))

Существует ли в data.table эквивалентный синтаксис, который выполняет операцию% in%, которая вложено! не оператор для фильтрации строк в таблице?

пример можно запустить с помощью следующего кода:

library(tidyverse) 
mtcars %>% filter(!(cyl %in% c(4,6)))

Ответы [ 2 ]

2 голосов
/ 21 февраля 2020

Существует метод subset для data.tables. Он имеет тот же синтаксис, что и метод data.frame:

dat <- mtcars
subset( setDT(dat), !(cyl %in% c(4,6))  )
#-----------------
     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
 1: 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
 2: 14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
 3: 16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
 4: 17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
 5: 15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
 6: 10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
 7: 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
 8: 14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
 9: 15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
10: 15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
11: 13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
12: 19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
13: 15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
14: 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8

См. ?subset.data.table

2 голосов
/ 20 февраля 2020

Как это? Ниже показано, как подмножество строк в data.table. По сравнению с вашим dplyr кодом, деталь !(cyl %in% c(4,6)) точно такая же, как ваш исходный код. Таким образом, в этом случае единственное, что вам нужно выучить, это dt[..code.., ] - это эквивалент df %>% filter(..code..), где ..code.. - логическое утверждение для оценки состояния каждой строки.

library(data.table)
dat <- mtcars
setDT(dat)[!(cyl %in% c(4,6)), ]
#      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#  1: 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
#  2: 14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
#  3: 16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
#  4: 17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
#  5: 15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
#  6: 10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
#  7: 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
#  8: 14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
#  9: 15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
# 10: 15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
# 11: 13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
# 12: 19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
# 13: 15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
# 14: 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...