R語言是21世紀的資料分析利器,數以萬計的「R包」構成了R的靈魂。但如果只允許推薦一個R包,作為R語言的4年忠實使用者和多個R包的開發者,我會毫不猶豫地向所有初學者和進階者推薦:
data.table
。
本文目錄
data。table
作為一種資料型別
data。table
作為一款R包
data。table
的學習資源合集
data。table速查表 - 1/2
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”]]
tibble 和 data。table 都能實現“巢狀表”
值得一提的是,
data。table
的效能優勢也是有測試結果作為實證依據的。Jan Gorecki 曾對比過不同開源軟體及程式包在資料處理方面的效能,結果發現,
data。table
在資料處理效率上秒殺一大批工具包,甚至輕鬆超越Python的
pandas
包和R語言的
dplyr
包(結果如下圖,測試資料規模為5 GB)。而當資料規模達到50 GB,
pandas
和
dplyr
都已經hold不住了(報錯或記憶體溢位),但
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
:
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包
這三者是可以相容幷包、組合使用的
圖片來源: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)官方文件(進階可參考)