使用 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
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
基于条件过滤行
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' 两列。
结论
在本教程中,我们介绍了不同的数据操作技术,例如导入数据集、根据列条件过滤行等。我希望本教程将帮助您加强在数据科学领域中的知识。