副问题[/!--empirenews.page--]
data.table简介
关于R中的数据处理赏罚,我们接着先容data.table 包。上期我们先容的dplyr 有相同于sql的一套数据处理赏罚的语法,而data.table 则有着它本身的一套语法,它能处理赏罚险些全部dplyr 可以处理赏罚的数据,并且代码量更少,服从更高,出格是在处理赏罚大至GB级此外数据时,它比dplyr 以及python的pandas 处理赏罚数据都要快。拜见https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping。
示例数据
我们继承相沿dplyr 中行使到的示例数据集pgdat ,这样可以利便做比拟,假如你想要获取该数据集的源代码,可以通过点击微信公家号进修教室中的案例数据 获得。
pgdat <- as.data.table(pgdat) pgdat # ? ? ?rk player wl ? ? ? ? ? ? match gs min ? fgp fgm fga ? ?p3p p3m p3a # ? 1: ?1 ? 库里 胜 ? 灰熊104-125勇士 ?1 ?30 62.5% ?15 ?24 ?52.6% ?10 ?19 # ? 2: ?2 ? 库里 胜 ? ? 马刺86-92勇士 ?1 ?35 59.1% ?13 ?22 ?44.4% ? 4 ? 9 # ? 3: ?3 ? 库里 胜 ? ?灰熊99-100勇士 ?1 ?34 31.8% ? 7 ?22 ?21.4% ? 3 ?14 # ? 4: ?4 ? 库里 胜 ? 马刺101-112勇士 ?1 ?36 57.9% ?11 ?19 ?42.9% ? 3 ? 7 # ? 5: ?5 ? 库里 负 丛林狼124-117勇士 ?1 ?43 28.0% ? 7 ?25 ?28.6% ? 4 ?14 # ?--- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 415: 49 ? 欧文 胜 ? ?把戏79-104骑士 ?1 ?21 33.3% ? 4 ?12 ? 0.0% ? 0 ? 4 # 416: 50 ? 欧文 胜 ? ?太阳97-101骑士 ?1 ?24 43.8% ? 7 ?16 ?28.6% ? 2 ? 7 # 417: 51 ? 欧文 负 ? ? 勇士89-83骑士 ?1 ?26 26.7% ? 4 ?15 ? 0.0% ? 0 ? 6 # 418: 52 ? 欧文 胜 ? 尼克斯84-91骑士 ?1 ?19 14.3% ? 1 ? 7 ? 0.0% ? 0 ? 1 # 419: 53 ? 欧文 胜 ? ?76人86-108骑士 ?1 ?17 41.7% ? 5 ?12 100.0% ? 2 ? 2 # ? ? ? ? ftp ftm fta reb oreb dreb ast stl blk tov pf pts # ? 1: 100.0% ? 6 ? 6 ? 4 ? ?1 ? ?3 ? 6 ? 2 ? 0 ? 2 ?2 ?46 # ? 2: 100.0% ? 7 ? 7 ? 5 ? ?0 ? ?5 ? 5 ? 2 ? 0 ? 4 ?4 ?37 # ? 3: ? ? ? ? ?0 ? 0 ? 9 ? ?0 ? ?9 ? 8 ? 1 ? 0 ? 2 ?1 ?17 # ? 4: 100.0% ? 2 ? 2 ? 5 ? ?0 ? ?5 ? 9 ? 2 ? 0 ? 3 ?2 ?27 # ? 5: 100.0% ? 3 ? 3 ? 6 ? ?2 ? ?4 ?15 ? 3 ? 0 ? 3 ?4 ?21 # ?--- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 415: ?71.4% ? 5 ? 7 ? 2 ? ?1 ? ?1 ? 5 ? 0 ? 0 ? 1 ?1 ?13 # 416: 100.0% ? 6 ? 6 ? 1 ? ?0 ? ?1 ? 2 ? 1 ? 0 ? 1 ?0 ?22 # 417: 100.0% ? 5 ? 5 ? 3 ? ?3 ? ?0 ? 2 ? 1 ? 0 ? 2 ?1 ?13 # 418: 100.0% ? 3 ? 3 ? 1 ? ?1 ? ?0 ? 4 ? 0 ? 0 ? 2 ?2 ? 5 # 419: ? ? ? ? ?0 ? 0 ? 1 ? ?0 ? ?1 ? 4 ? 2 ? 0 ? 1 ?1 ?12
1. 根基观念
a) data.table是什么?
我们知道R中的数据框data.frame,而data.table可以看做是一个加强版的data.frame。建设一个data.table工具可以行使fread 函数以读入文件的情势天生,也可以直接回收data.table 函数天生。
DT = data.tableID c("b","a",68);">"c"), ? ? ? ? ? ? ? ?a = 1:6,b 712,0);">c=1318DT # ? ?ID a ?b ?c # 1: ?b 1 ?7 13 # 2: ?b 2 ?8 14 # 3: ?b 3 ?9 15 # 4: ?a 4 10 16 # 5: ?a 5 11 17 # 6: ?c 6 12 18 classDT$ID) # [1] "character"
用as.data.table 可以将data.frame转化为data.table。
data.table与data.frame的区别:
与data.frames差异,在天生data.table的时辰character 范例的数据绝对不会默认地转换成factors 范例,这样的甜头就是你不消再在语句中每次都添加stringsAsFactors = FALSE了;
打印数据时在行号后头加了一个冒号: 用以区分行号与第一列数据;
当数据行数高出options() 参数配置datatable.print.nrows 的值时,仅仅只会打印该数据集的前5行以及最后5行的数据;
# 查察默认参数配置 getOption"datatable.print.nrows"# [1] 100
|