【数据处理】R语言--data.table包使用总结

本文详细介绍了R语言中data.table包的使用,包括安装、数据导入、选择列、重命名变量、子集筛选、利用索引提升效率、排序、添加更新列、数据聚合等功能。通过实例展示了data.table的强大功能,特别适用于处理大型数据集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

data.table包使用总结

R中的data.table包提供了一个data.frame的高级版本,让你的程序做数据整型的运算速度大大的增加。data.table已经在金融,基因工程学等领域大放光彩。他尤其适合那些需要处理大型数据集(比如 1GB 到100GB)需要在内存中处理数据的人。不过这个包的一些符号并不是很容易掌握,因为这些操作方式在R中比较少见。这也是这篇文章的目的,为了给大家提供一个速查的手册。

data.table的通用格式: DT[i, j, by],对于数据集DT,选取子集行i,通过by分组计算j

1.首先下载安装data.table包

install.packages("data.table") 
library(data.table)

利用fread函数导入数据,在data.table包支持使用fread函数从本地或者web上导入数据,功能相当于base包的read.csv。

mydata = fread("https://github.com/arunsrinivasan/satrdays-workshop/raw/master/flights_2014.csv")

2.数据简单描述

nrow(mydata)
[1] 253316

ncol(mydata)
[1] 17

names(mydata)
[1] "year"      "month"     "day"       "dep_time"  "dep_delay" "arr_time"  "arr_delay"
[8] "cancelled" "carrier"   "tailnum"   "flight"    "origin"    "dest"      "air_time"
[15] "distance"  "hour"      "min" 

head(mydata[,c(2:6)])
   month day dep_time dep_delay arr_time
1:     1   1      914        14     1238
2:     1   1     1157        -3     1523
3:     1   1     1902         2     2224
4:     1   1      722        -8     1014
5:     1   1     1347         2     1706
6:     1   1     1824         4     2145

3.选择或保留某几列

.()为list()的一个别名。如果使用.(),返回的为一个data.table对象。如果不使用.(),结果为返回一个向量。

如果要选择carrier列,那么可以选择如下几种方式实现:

dat1 = mydata[ , carrier] # 返回一组向量

dat1 = mydata[ , .(carrier)] #返回一个data.table

dat1 = mydata[, c("carrier"), with=FALSE] #返回一组数据框

根据列的位置保留某几列,比如选择第二列:

dat2 =mydata[, 2, with=FALSE]

保留多列:

dat3 = mydata[, .(origin, year, month, hour)]

根据列的位置保留多列:

dat3 = mydata[, .(origin, year, month, hour)]

删去列:利用!符号删除某列

dat5 = mydata[, !c("origin"), with=FALSE]

删去多列

dat6 = mydata[, !c("origin", "year", "month"), with=FALSE]

利用%like% 命令进行模糊匹配:

dat7 = mydata[,names(mydata) %like% "dep", with=FALSE]

4.对变量进行重命名

可以利用setnames()函数对变量进行重命名操作:

setnames(mydata, c("dest"), c("Destination"))

对多个变量进行重命名:

setnames(mydata, c("dest","origin"), c("Destination", "origin.of.flight"))

5.子集的筛选与过滤

假设要找到origin为‘JFK’的所有子集:

dat8 = mydata[origin == "JFK"]

按多个条件选择

dat9 = mydata[origin %in% c("JFK", "LGA")]

dat11 = mydata[origin == "JFK" & carrier == "AA"]

6.利用索引提升数据操作效率

使用setkey()函数设置键值
setkey()函数可以在数据集mydata上设置键值。当我们设置好key后,data.table会将数据按照key来排序。
利用setkey函数将origin设置为mydata的索引:

setkey(mydata, origin)

当设置好索引后,可直接利用索引的值进行过滤查找

data12 = mydata[c("JFK", "LGA")]

来看看用了索引与没用索引的搜索效率:

system.time(mydata[origin %in% c("JFK", "LGA")])
system.time(mydata[c("JFK", "LGA")])

对多个变量设置索引

setkey(mydata, origin, dest)
mydata[.("JFK", "MIA")]

这等同于:

mydata[origin == "JFK" & dest == "MIA"]

重要参数

mult参数

mult参数是用来控制i匹配到的哪一行的返回结果默认情况下会返回该分组的所有元素
返回匹配到键值所在列(V2列)所有行中的第一行

 DT[
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值