在 data.table 中篩選列

R 的 data.table 資料操作

Matt Dowle and Arun Srinivasan

Instructors, DataCamp

data.table 語法總覽

第一個引數 i 用來「取子集」或「篩選」列。

# data.table 語法的一般形式
DT[i, j, by]
   |  |  |
   |  |  --> 依什麼分組?
   |  -----> 要做什麼?
   --------> 哪些列?
R 的 data.table 資料操作

列號

# 取出第 3 與第 4 列
batrips[3:4]

# 同等於
batrips[3:4, ]
# 取出除前 5 列外的所有列
batrips[-(1:5)] 

# 同等於
batrips[!(1:5)]
R 的 data.table 資料操作

特殊符號 .N

  • .N 是整數,代表 data.table 的列數。
  • i 中可作為 nrow(x) 的好替代。
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
R 的 data.table 資料操作

布林運算式(I)

# 取出 subscription_type 為 "Subscriber" 的列
batrips[subscription_type == "Subscriber"]

# 若 batrips 只是 data frame
batrips[batrips$subscription_type == "Subscriber", ]
R 的 data.table 資料操作

布林運算式(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]
R 的 data.table 資料操作

布林運算式(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
R 的 data.table 資料操作

一起來練習吧!

R 的 data.table 資料操作

Preparing Video For Download...