使用 data.table 在 R 中進行資料操作
資料操作是資料分析過程中的一個關鍵步驟,因為它允許我們以適合特定分析或視覺化的方式準備和組織資料。根據資料的型別和結構以及操作的具體目標,存在許多不同的資料操作工具和技術。
data.table 包是R的一個包,它提供了R中data.frame類的增強版本。它的語法和功能使操作和處理大型資料集更容易、更快。
data.table 是開發人員下載最多的包之一,也是資料科學家的理想選擇。
安裝 data.table 包
安裝 data.table 包與安裝其他包一樣簡單。您可以使用以下命令在CRAN的命令列工具中安裝此包:
使用 CRAN 安裝 'data.table' 包
install.packages('data.table')
從 Gitlab 安裝開發版本
install.packages("data.table", repos="https://Rdatatable.gitlab.io/data.table")
匯入資料集
在 R 程式語言中,我們有大量的內建資料集,可以用作演示資料來演示 R 函式的工作方式。
一個這樣的流行內建資料集是“Iris”資料集。此資料集提供了 50 朵花(三個不同物種)的四個不同屬性的測量值。
我們在data.table中處理資料集的方式與在data.frame中處理資料集的方式大相徑庭。讓我們深入探討這一點並獲得一些見解。
data.table 提供了 fread() 函式(快速讀取),它基本上是 data.table 的 read.csv() 函式版本。與 read.csv() 函式類似,它可以讀取本地儲存的檔案,也可以讀取網站上託管的檔案。
示例
考慮以下程式,該程式匯入作為 CSV 檔案儲存在網際網路上的 iris 資料:
# Importing library library(data.table) # Creating a dataset myDataset <- fread("https://raw.githubusercontent.com/gexijin/learnR/master/datasets/iris.csv") # print the iris dataset print(myDataset)
輸出
[1] "data.table" "data.frame"
從上面的輸出中可以看到,匯入的資料直接儲存為 data.table。
data.table 通常繼承自 data.frame 類,因此它本身就是一個 data.frame。因此,那些接受 data.frame 的函式也可以用於 data.table。
顯示 IRIS 資料集
示例
# Importing library library(data.table) # Creating a dataset myDataset <- fread( "https://raw.githubusercontent.com/gexijin/learnR/master/datasets/iris.cs v") # print the iris dataset print(myDataset)
輸出
Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1: 5.1 3.5 1.4 0.2 setosa 2: 4.9 3.0 1.4 0.2 setosa 3: 4.7 3.2 1.3 0.2 setosa 4: 4.6 3.1 1.5 0.2 setosa 5: 5.0 3.6 1.4 0.2 setosa --- 146: 6.7 3.0 5.2 2.3 virginica 147: 6.3 2.5 5.0 1.9 virginica 148: 6.5 3.0 5.2 2.0 virginica 149: 6.2 3.4 5.4 2.3 virginica 150: 5.9 3.0 5.1 1.8 virginica
Iris 資料集包含 150 行和 5 列。
讓我們列印 iris 資料集的前六行
head(myDataset)
輸出
Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1: 5.1 3.5 1.4 0.2 setosa 2: 4.9 3.0 1.4 0.2 setosa 3: 4.7 3.2 1.3 0.2 setosa 4: 4.6 3.1 1.5 0.2 setosa 5: 5.0 3.6 1.4 0.2 setosa 6: 5.4 3.9 1.7 0.4 setosa
基於條件過濾行
data.frame 包的主要問題是該包不瞭解其列名。因此,當我們需要根據列條件選擇或過濾某些行時,有時會變得困難。
data.table 包具有高階功能,使其能夠了解其列名。使用 data.table 包,我們可以透過在方括號內傳遞列條件輕鬆過濾行。
myDataset[column_condition]
這裡column_condition 指定了基於其選擇某些行的列條件。
讓我們考慮一個示例,使用條件 "Sepal.Length==5.1 & Petal.Length==1.4" 來過濾資料集。
示例
# Importing library library(data.table) # Creating a dataset myDataset <- fread( "https://raw.githubusercontent.com/gexijin/learnR/master/datasets/iris.csv") # datatable syntax to filter rows # based on column condition myDataset[Sepal.Length==5.1 & Petal.Length==1.4,]
輸出
Sepal.Width Petal.Length Petal.Width Species 1: 5.1 3.5 1.4 0.2 setosa 2: 5.1 3.5 1.4 0.3 setosa
如您在上面的輸出中看到的,已過濾出兩行與方括號內提供的列條件匹配的行。
選擇列
我們現在將瞭解如何使用 data.table 包選擇資料集的列。選擇列的基本語法如下所示:
myDataset[, column_number, with = F]
這裡column_number必須等於您要子集的列(列為 1 基)
示例
讓我們考慮一個示例,在這個示例中,我們想要選擇 iris 資料集的第二列:
library(data.table) # Creating a dataset myDataset <- fread( "https://raw.githubusercontent.com/gexijin/learnR/master/datasets/iris.csv") # data.table syntax to subset second column myDataset[, 2, with = F]
輸出
Sepal.Width 1: 3.5 2: 3.0 3: 3.2 4: 3.1 5: 3.6 --- 146: 3.0 147: 2.5 148: 3.0 149: 3.4 150: 3.0
如您在上面的輸出中看到的,已選擇了 iris 資料集的第二列。
示例
現在讓我們選擇多列。在下面的示例中,我們選擇兩列,即 'Petal.Length' 和 'Species'。
# Importing library library(data.table) # Creating a dataset myDataset <- fread( "https://raw.githubusercontent.com/gexijin/learnR/master/datasets/iris.csv") columns <- c('Petal.Length', 'Species') # selecting two columns- 'Petal.Length' and 'Species' myDataset[, columns, with = F]
輸出
Petal.Length Species 1: 1.4 setosa 2: 1.4 setosa 3: 1.3 setosa 4: 1.5 setosa 5: 1.4 setosa --- 146: 5.2 virginica 147: 5.0 virginica 148: 5.2 virginica 149: 5.4 virginica 150: 5.1 virginica
在這裡,我們選擇了'Petal.Length' 和 'Species' 兩列。
結論
在本教程中,我們介紹了不同的資料操作技術,例如匯入資料集、根據列條件過濾行等。我希望本教程將幫助您加強在資料科學領域中的知識。