Lọc hàng trong data.table

Xử lý dữ liệu với data.table trong R

Matt Dowle and Arun Srinivasan

Instructors, DataCamp

Cú pháp tổng quát của data.table

Đối số đầu tiên i dùng để chọn hoặc lọc hàng

# Cú pháp tổng quát của data.table
DT[i, j, by]
   |  |  |
   |  |  --> nhóm theo gì?
   |  -----> làm gì?
   --------> trên hàng nào?
Xử lý dữ liệu với data.table trong R

Số thứ tự hàng

# Lấy hàng thứ 3 và 4 từ batrips
batrips[3:4]

# Tương đương
batrips[3:4, ]
# Lấy tất cả trừ 5 hàng đầu
batrips[-(1:5)] 

# Tương đương
batrips[!(1:5)]
Xử lý dữ liệu với data.table trong R

Ký hiệu đặc biệt .N

  • .N là một số nguyên biểu thị số hàng trong data.table
  • Thay thế hữu ích cho nrow(x) trong i
nrow(batrips) 
326339
batrips[326339]
trip_id duration
588914      364
# Trả về hàng cuối cùng
batrips[.N] 
trip_id duration
588914      364
# Trả về tất cả trừ 10 hàng cuối
ans <- batrips[1:(.N-10)] 
nrow(ans)
326329
Xử lý dữ liệu với data.table trong R

Biểu thức logic (I)

# Lọc hàng có subscription_type là "Subscriber"
batrips[subscription_type == "Subscriber"]

# Nếu batrips chỉ là data frame
batrips[batrips$subscription_type == "Subscriber", ]
Xử lý dữ liệu với data.table trong R

Biểu thức logic (II)

# Lọc hàng có start_terminal = 58 và end_terminal khác 65
batrips[start_terminal == 58 & end_terminal != 65]

# Nếu batrips chỉ là data frame
batrips[batrips$start_terminal == 58 & batrips$end_terminal != 65]
Xử lý dữ liệu với data.table trong R

Biểu thức logic (III)

Tự động tối ưu bằng chỉ mục thứ cấp để tăng tốc

set.seed(1)
dt <- data.table(x = sample(10000, 10e6, TRUE), 
                 y = sample(letters, 1e6, TRUE))
indices(dt)
NULL
# 0.207s ở lần chạy đầu 
#(thời gian tạo chỉ mục + lọc)
system.time(dt[x == 900])
user  system elapsed 
0.207   0.015   0.226 
indices(dt)
"x"
# 0.002s ở các lần sau
#(lọc tức thì nhờ chỉ mục)
system.time(dt[x == 900])
user  system elapsed 
0.002   0.000   0.002
Xử lý dữ liệu với data.table trong R

Cùng luyện tập nào!

Xử lý dữ liệu với data.table trong R

Preparing Video For Download...