第 6 章 数据操作
data.table 诞生于2006年4月15日(以在 CRAN 上发布的第一个版本时间为准),是基于 data.frame
的扩展和 Base R 的数据操作连贯一些,dplyr 诞生于2014年1月29日,号称数据操作的语法,其实二者套路一致,都是借用 SQL 语言的设计,实现方式不同罢了,前者主要依靠 C 语言完成底层数据操作,总代码量1.29M,C 占65.6%,后者主要依靠 C++ 语言完成底层数据操作,总代码量1.2M,C++ 占34.4%,上层的高级操作接口都是 R 语言。像这样的大神在写代码,码力应该差不多,编程语言会对数据操作的性能有比较大的影响,我想这也是为什么在很多场合下 data.table 霸榜!
关于 data.table 和 dplyr 的对比,参看爆栈网的帖子 https://stackoverflow.com/questions/21435339
学习 data.table 包最快的方式就是在 R 控制台运行 example(data.table)
并研究其输出。
data.table 大大加强了 Base R 提供的数据操作,poorman 提供最常用的数据操作,但是不依赖 dplyr,fst,arrow 和 feather 提供更加高效的数据读写性能。
collapse 提供一系列高级和快速的数据操作,支持 Base R、dplyr、tibble、data.table、plm 和 sf 数据框结构类型。关键的特点有:1. 高级的统计编程,提供一系列统计函数支持在向量、矩阵和数据框上做分组和带权计算。fastverse 提供丰富的数据操作和统计计算功能,意图打造一个 tidyverse 替代品。
更多参考材料见A data.table and dplyr tour, Big Data in Economics: Data cleaning and wrangling 和 DataCamp’s data.table cheatsheet,关于采用 Base R 还是 tidyverse 做数据操作的 讨论,数据操作的动画展示参考 https://github.com/gadenbuie/tidyexplain。
什么是 Base R? Base R 指的是 R 语言/软件的核心组件,由 R Core Team 维护
<- sapply(list.files(R.home("library")), function(x)
Pkgs packageDescription(pkg = x, fields = "Priority"))
names(Pkgs[Pkgs == "base" & !is.na(Pkgs)])
## [1] "base" "compiler" "datasets" "graphics" "grDevices" "grid"
## [7] "methods" "parallel" "splines" "stats" "stats4" "tcltk"
## [13] "tools" "utils"
names(Pkgs[Pkgs == "recommended" & !is.na(Pkgs)])
## [1] "boot" "class" "cluster" "codetools" "foreign"
## [6] "KernSmooth" "lattice" "MASS" "Matrix" "mgcv"
## [11] "nlme" "nnet" "rpart" "spatial" "survival"
数据变形,分组统计聚合等,用以作为模型的输入,绘图的对象,操作的数据对象是数据框(data.frame)类型的,而且如果没有特别说明,文中出现的数据集都是 Base R 内置的,第三方 R 包或者来源于网上的数据集都会加以说明。
# 给定一个/些 R 包名,返回该 R 包存放的位置
sapply(.libPaths(), function(pkg_path) {
c("survival", "ggplot2") %in% .packages(T, lib.loc = pkg_path)
})
## /home/runner/work/_temp/Library /opt/R/4.2.3/lib/R/site-library
## [1,] FALSE FALSE
## [2,] TRUE FALSE
## /opt/R/4.2.3/lib/R/library
## [1,] TRUE
## [2,] FALSE