R語言是21世紀的資料分析利器,數以萬計的「R包」構成了R的靈魂。但如果只允許推薦一個R包,作為R語言的4年忠實使用者和多個R包的開發者,我會毫不猶豫地向所有初學者和進階者推薦:

data.table

本文目錄

data。table

作為一種資料型別

data。table

作為一款R包

data。table

的學習資源合集

R語言必學之「data.table」學習資源合集

data。table速查表 - 1/2

R語言必學之「data.table」學習資源合集

data。table速查表 - 2/2

(關於

data。table

速查表,詳見:RStudio Cheatsheets)

1 /

data。table

作為一種資料型別

用過R語言的人都知道,

data。frame

是R內建的、預設的資料框型別(即一個具有行和列的資料表)。從外部匯入的資料一般都以

data。frame

資料框格式在R裡面進行處理和分析。

data。table

作為一種高階資料型別,首先繼承了

data。frame

基礎資料型別,其官方文件已經明確說明“

data。table

data。frame

的擴充套件(extension)”。

library(rio) # 資料匯入匯出(“一站式”R包,可匯入任意格式/字尾的外部資料)

library(data。table) # data。table資料型別與資料處理

data = import(“YourData。xlsx”, sheet=“Sheet1”) # 詳見rio包的import/export函式

dt = as。data。table(data) # 預設是data。frame,轉換為data。table,並存至一個新變數

class(dt) # 檢視資料型別

# [1] “data。table” “data。frame”

同時,

data。table

具備很多獨特而出色的性質,與其他資料型別(如

data。frame

tibble

/

tbl_df

)相比具有很多優勢。

高效:輕鬆、快速處理GB級別的大資料,並且融合了SQL資料庫的語法風格

極簡:只需很短的程式碼就能完成資料的行、列、分組、合併、重塑等相關操作

豐富:資料型別自帶篩選、計算、分組、合併等多種方法,無需藉助其他函式

此外,一部分R使用者需要在資料框裡面“巢狀表”,由於

data。frame

無法實現而十分推崇

tibble

tbl_df

)。其實,這一點不僅

tibble

能實現,

data。table

也完全能實現。

d1=data。frame(a=1:3, b=4:6)

d2=data。frame(a=4:6, b=1:3)

df=data。frame(x=list(d1, d2))

df # 無法實現“巢狀表”

db=tibble::tibble(x=list(d1, d2))

db # 可以實現“巢狀表”

db[[1, “x”]][[1]]

dt=data。table::data。table(x=list(d1, d2))

dt # 可以實現“巢狀表”

dt[[1, “x”]]

R語言必學之「data.table」學習資源合集

tibble 和 data。table 都能實現“巢狀表”

值得一提的是,

data。table

的效能優勢也是有測試結果作為實證依據的。Jan Gorecki 曾對比過不同開源軟體及程式包在資料處理方面的效能,結果發現,

data。table

在資料處理效率上秒殺一大批工具包,甚至輕鬆超越Python的

pandas

包和R語言的

dplyr

包(結果如下圖,測試資料規模為5 GB)。而當資料規模達到50 GB,

pandas

dplyr

都已經hold不住了(報錯或記憶體溢位),但

data。table

依然穩居榜首(詳見:資料處理工具效能大比拼)。

R語言必學之「data.table」學習資源合集

資料處理工具效能大比拼(https://h2oai。github。io/db-benchmark/)

2 /

data。table

作為一款R包

使用

data。table

包並不意味著排斥或棄用其他R包——相反,

data。table

包是能夠和

tidyverse

dplyr

等著名R包

相容並存、相輔相成

的。雖然我大力推薦使用

data。table

包,但是在我開發的

bruceR

包裡,首先為使用者安裝的就是

tidyverse

包,並且當用戶透過

library(bruceR)

載入

bruceR

時,預設載入的還有其他一系列重要的、常用的R包,其中就包括

dplyr

data。table

R語言必學之「data.table」學習資源合集

bruceR包的載入

這裡需要明確幾個事實:

tidyverse

本身只是一系列常用包的集合(包括

dplyr

ggplot2

lubridate

stringr

tibble

tidyr

等),並且載入時會為使用者預設載入某些常用包,但它本身並沒有什麼實質性的函式(不信可以檢視它的幫助文件)。

管道運算子(

%>%

)非常好用,也與

data。table

完全相容,但它本身既不是

tidyverse

包裡的,也不是

dplyr

包裡的,而是

magrittr

包裡的。

dplyr

包的各種資料操作或處理函式,完全適用於

data。frame

tibble

/

tbl_df

data。table

等資料型別,因此

data。table

dplyr

並不衝突(比如,我個人也喜歡用

dplyr::left_join()

函式對

data。table

資料進行匹配拼接處理)。

總之:

tidyverse

是建議安裝的一個綜合性R包(並不必然與

tibble

相聯絡)

dplyr

是建議掌握的一個數據處理R包(並不必然與

tibble

相聯絡)

data。table

是強烈建議掌握的一個兼具資料型別和資料處理功能的R包

這三者是可以相容幷包、組合使用的

R語言必學之「data.table」學習資源合集

圖片來源:https://zhuanlan。zhihu。com/p/83592539

3 /

data。table

的學習資源合集

當我們從外部以

data。table

型別匯入資料,就可以領略它在資料處理方面的妙處了。

library(rio) # 資料匯入匯出(“一站式”R包,可匯入任意格式/字尾的外部資料)

library(data。table) # data。table資料型別與資料處理

library(dplyr) # 資料處理

data = import(“YourData。xlsx”, setclass=“data。table”) # 直接以data。table型別匯入

。。。

學習並掌握

data。table

需要花費一些時間,並且要在實際專案中多寫程式碼以達到熟練

。但是一旦掌握,資料分析效率將大幅提升,並且很可能會產生一種

“人R合一”的暢態體驗

下面是我收集整理的

data。table

學習資源,供大家自學參考:

(1)教程系列(入門可參考)

(2)官方文件(進階可參考)