Фільтрування рядків у data.table

Опрацювання даних із data.table в R

Matt Dowle and Arun Srinivasan

Instructors, DataCamp

Загальна форма синтаксису data.table

Перший аргумент i використовують, щоб вибрати підмножину або відфільтрувати рядки

# Загальна форма синтаксису data.table
DT[i, j, by]
   |  |  |
   |  |  --> за чим групувати?
   |  -----> що робити?
   --------> по яких рядках?
Опрацювання даних із data.table в R

Номери рядків

# Виберіть 3-й і 4-й рядки з batrips
batrips[3:4]

# Те саме
batrips[3:4, ]
# Виберіть усе, крім перших п'яти рядків
batrips[-(1:5)] 

# Те саме
batrips[!(1:5)]
Опрацювання даних із data.table в R

Спеціальний символ .N

  • .N — ціле число з кількістю рядків у data.table
  • Зручна альтернатива nrow(x) у i
nrow(batrips) 
326339
batrips[326339]
trip_id duration
588914      364
# Повертає останній рядок
batrips[.N] 
trip_id duration
588914      364
# Поверніть усі, крім останніх 10 рядків
ans <- batrips[1:(.N-10)] 
nrow(ans)
326329
Опрацювання даних із data.table в R

Логічні вирази (I)

# Виберіть рядки, де subscription_type — "Subscriber"
batrips[subscription_type == "Subscriber"]

# Якщо batrips був би лише data frame
batrips[batrips$subscription_type == "Subscriber", ]
Опрацювання даних із data.table в R

Логічні вирази (II)

# Виберіть рядки, де start_terminal = 58, а end_terminal не 65
batrips[start_terminal == 58 & end_terminal != 65]

# Якщо batrips був би лише data frame
batrips[batrips$start_terminal == 58 & batrips$end_terminal != 65]
Опрацювання даних із data.table в R

Логічні вирази (III)

Автоматично оптимізується завдяки вторинним індексам для швидкості

set.seed(1)
dt <- data.table(x = sample(10000, 10e6, TRUE), 
                 y = sample(letters, 1e6, TRUE))
indices(dt)
NULL
# 0,207 с під час першого запуску 
#(час на створення індексу + вибірку)
system.time(dt[x == 900])
user  system elapsed 
0.207   0.015   0.226 
indices(dt)
"x"
# 0,002 с при наступних запусках
#(миттєва вибірка за індексом)
system.time(dt[x == 900])
user  system elapsed 
0.002   0.000   0.002
Опрацювання даних із data.table в R

Давайте потренуємось!

Опрацювання даних із data.table в R

Preparing Video For Download...