從 data.table 選取欄位

R 的 data.table 資料操作

Matt Dowle, Arun Srinivasan

Instructors, DataCamp

data.table 語法總覽(複習)

第二個引數 j 用來「選取」(並可計算)欄位。

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

用欄名選取欄位

j 引數可接受欄名的字元向量。

ans <- batrips[, c("trip_id", "duration")]
head(ans, 2)
trip_id duration
139545      435
139546      432
R 的 data.table 資料操作

用欄名選取欄位

batrips_df <- as.data.frame(batrips)
ans <- batrips_df[, "trip_id"]
head(ans, 2)
# 結果是向量,不是 data.frame
139545, 139546
ans <- batrips[, "trip_id"]
# 仍是 data.table,不是向量
head(ans, 2) 
trip_id
139545
139546
R 的 data.table 資料操作

以欄號取代欄名也可行

ans <- batrips[, c(2, 4)]
head(ans, 2)
duration  start_station
435       San Francisco City Hall
432       San Francisco City Hall

不過,這被視為「不佳做法」

# 若欄位順序改變,結果就會錯
batrips[, c(2, 4)]

# 不論欄位順序為何,結果都正確
batrips[, c("duration", "start_station")]
R 的 data.table 資料操作

用字元向量反選欄位

  • -c("col1", "col2", ...) 會「反選」指定欄位。
  • 僅在 data.table 提供的便利功能。
  • ! 取代 -,效果相同。
# 選取除下列欄位外的所有欄
ans <- batrips[, -c("start_date", "end_date", "end_station")]
head(ans, 1)
trip_id  duration  start_station             start_terminal  bike_id  end_terminal
139545   435       San Francisco City Hall   58              65       473 

subscription_type  zip_code
Subscriber         94612
R 的 data.table 資料操作

data.table 風格選欄位

還記得上一章在 i 引數中把欄位當成變數用嗎?

# 複習「i」引數
# 所有超過一小時的旅程
batrips[duration > 3600]

同樣地,你也能用「變數清單」(欄名)來選取欄位

ans <- batrips[, list(trip_id, dur = duration)]
head(ans, 2)
trip_id     dur
139545      435
139546      432
R 的 data.table 資料操作

選單一欄時,不用 list() 包起來會回傳 vector

# 選單一欄並回傳 data.table
ans <- batrips[, list(trip_id)]
head(ans ,2)
trip_id
139545
139546
# 選單一欄並回傳向量
ans <- batrips[, trip_id]
head(ans, 2)
139545 139546
R 的 data.table 資料操作

data.table 風格選欄位

.()list() 的別名,方便使用。

# .() 等同於 list()
ans <- batrips[, .(trip_id, duration)]
head(ans, 2)
trip_id duration
139545      435
139546      432
R 的 data.table 資料操作

一起來練習吧!

R 的 data.table 資料操作

Preparing Video For Download...