【R语言】data.table简单介绍

1、data.table简介

      R语言data.frame包的扩展,为R语言提供了快速整合金和处理大型数据的能力。学习data.table可以结合SQL语句学习,理解起来就很简单了。下面具体介绍一下data.table中。

       data.table基本命令语法为:DT[i, j, by]

       参数的理解可以结合SQL语句中的关键词来理解。

       DT为操作对象

       i类似于SQL中的关键词where,主要起到过滤作用的。

       j类似于SQL中的关键词select,主要用于查询、更新数据等。这里添加新的字段使用“:=”函数;

      by类似于SQL中group by函数,进行数据分组,主要和聚合函数一起使用。

     SQL中关键词的书写顺序为select—from—where—group by—having—order by,执行顺序为from –where –group by—having –select—order by。

     仅仅看SQL中的select、from和where三个关键词来理解DT[i, j, by]。对于data.table,可以从SQL中关键词的执行顺利来理解DT[i, j, by],DT可以理解为from, i理解为where,  j理解为select。

2、数据类型转换

     使用data.table()函数将data.frame类型的数据转换为data.table类型数据,例如:

   

##加载data.table包
library(data.table)
data(iris)
##数据类型转换
iris.dt <- data.table(iris.dt)
class(iris);class(iris.dt)

3、重命名列名

##复制iris.dt
iris.dt1 <- copy(iris.dt) 
colnames(iris.dt1)
##改变列名,setnames()函数
setnames(iris.dt1, c("sepal.length", "sepal.width" , "petal.length", "petal.width", "species"))
colnames(iris.dt1)

 

 

 

 

4、理解DT[i, j, by]中i的过滤作用

     理解这里的i作用,如果熟悉SQL的同学,可以把它的作用和SQL中的where的作用联想起来,主要起到过滤行作用的。

##选取前5行数据
iris.dt[1:5]
##选择后3行数据
iris.dt[(.N-3):(.N)] #.N表示数据集行数
##选取Sepal.Length小于4.5的数据
iris.dt[Sepal.Length < 4.5]
##选取Sepal.Length大于6.5小于7的数据
iris.dt[Sepal.Length > 6.5 & Sepal.Length < 7]
##选择Sepal.Length大于平均值的记录
iris.dt[Sepal.Length > mean(Sepal.Length, na.rm = T)]
##选择Sepal.Length最小、最大的记录
iris.dt[Sepal.Length == min(Sepal.Length)]
iris.dt[Sepal.Length == max(Sepal.Length)]

5、理解DT[i, j, by]中j的作用

    理解data.table中参数j的作用,可以和SQL语句中关键词select联想到一起,SQL中select语句后面跟的字段是目标列,可以是原数据中的列,可以是增加的新列等,多个列通过list()函数或者.()函数包裹起来。注意不像data.frame中的选择列名一样,列名不用“”引起来。

##选择指定列,注意下面两个的数据类型
head(iris.dt[, Sepal.Length])
head(iris.dt[, "Sepal.Length"]) 
class(iris.dt[, Sepal.Length])    ##numeric
class(iris.dt[, "Sepal.Length"])  ##data.table

##选取多列数据,可以使用list()或者.()函数
head(iris.dt[, list(Sepal.Length,Sepal.Width, Species)])
head(iris.dt[, .(Sepal.Length,Sepal.Width, Species)])

###添加新的列,使用(:=)函数
iris.dt[, Sum_Length_Width := Sepal.Length + Sepal.Width]

##删除列
iris.dt[,Sum_Length_Width := NULL]

6、理解DT[i, j, by]中by的分组作用

     理解by的作用,可以和SQL语句中的group by联想起来,主要用于分组数据。常和聚合函数一起使用,聚合函数使用在j的位置。

##获取不同Species的Sepal.Length属性的平均值
iris.dt[, mean(Sepal.Length), by = Species]
##命名聚合数据,使用.()函数或者list()函数
iris.dt[, .(Avg_Sepal.Length = mean(Sepal.Length)), by = Species]
iris.dt[, list(Avg_Sepal.Length = mean(Sepal.Length)), by = Species]

##不同品种的Sepal.Length的summary
iris.dt[, .(summary_SL = summary(Sepal.Length)), by = Species]
iris.dt[, .(fivenum_SL = fivenum(Sepal.Length)), by = Species]

##计算不同Species的个数
iris.dt[, .(N = length(Sepal.Length)), by = Species]

7、整体来看DT[i,j,by]

##计算每个品种中Sepal_Length大于5的个数
iris.dt[Sepal.Length > 5, .(num = length(Sepal.Length)), by = Species]
##计算每个品种中的Sepal_Length大于5并且Sepal_Width大于3的个数
iris.dt[Sepal.Length > 5 & Sepal.Width > 3, .(num = length(Sepal.Length)), by = Species]

    理解上述语句,Sepal.Length>5类似于SQL语句中的where,先对iris.dt中的行进行过滤,然后通过by=Species进行分组,最后计算出每一组中的样本数。

【R语言】data.table简单介绍_第1张图片

 

 

 

 

 

 

 

你可能感兴趣的:(【R语言】data.table简单介绍)