数据汇总
- summary
对一个数据框 d,用 summary(d) 可以获得每个连续型变量的基本统计量,和每个离散取值变量的频率。以及分类变量的各种类型的统计结果。如:
> summary(CO2)
Plant Type Treatment conc
Qn1 : 7 Quebec :42 nonchilled:42 Min. : 95
Qn2 : 7 Mississippi:42 chilled :42 1st Qu.: 175
Qn3 : 7 Median : 350
Qc1 : 7 Mean : 435
Qc3 : 7 3rd Qu.: 675
Qc2 : 7 Max. :1000
(Other):42
uptake
Min. : 7.70
1st Qu.:17.90
Median :28.30
Mean :27.21
3rd Qu.:37.12
Max. :45.50
- str
对数据框 d,用 str(d) 可以获得各个变量的类型和取值样例。如:
> str(CO2)
Classes ‘nfnGroupedData’, ‘nfGroupedData’, ‘groupedData’ and 'data.frame': 84 obs. of 5 variables:
$ Plant : Ord.factor w/ 12 levels "Qn1"<"Qn2"<"Qn3"<..: 1 1 1 1 1 1 1 2 2 2 ...
$ Type : Factor w/ 2 levels "Quebec","Mississippi": 1 1 1 1 1 1 1 1 1 1 ...
$ Treatment: Factor w/ 2 levels "nonchilled","chilled": 1 1 1 1 1 1 1 1 1 1 ...
$ conc : num 95 175 250 350 500 675 1000 95 175 250 ...
$ uptake : num 16 30.4 34.8 37.2 35.3 39.2 39.7 13.6 27.3 37.1 ...
- attr(*, "formula")=Class 'formula' language uptake ~ conc | Plant
.. ..- attr(*, ".Environment")=<environment: R_EmptyEnv>
- attr(*, "outer")=Class 'formula' language ~Treatment * Type
.. ..- attr(*, ".Environment")=<environment: R_EmptyEnv>
- attr(*, "labels")=List of 2
..$ x: chr "Ambient carbon dioxide concentration"
..$ y: chr "CO2 uptake rate"
- attr(*, "units")=List of 2
..$ x: chr "(uL/L)"
..$ y: chr "(umol/m^2 s)"
还有一个pillar::glimpse 函数,更简洁:
> glimpse(CO2)
Rows: 84
Columns: 5
$ Plant <ord> Qn1, Qn1, Qn1, Qn1, Qn1, Qn1, Qn1, Qn2, Qn2, Qn2, Qn…
$ Type <fct> Quebec, Quebec, Quebec, Quebec, Quebec, Quebec, Queb…
$ Treatment <fct> nonchilled, nonchilled, nonchilled, nonchilled, nonc…
$ conc <dbl> 95, 175, 250, 350, 500, 675, 1000, 95, 175, 250, 350…
$ uptake <dbl> 16.0, 30.4, 34.8, 37.2, 35.3, 39.2, 39.7, 13.6, 27.3…
- head, tail
看数据框前后几行。
概括函数
连续性变量:对连续取值的变量 x,可以用 mean, std, var, sum, prod, min, max 等函数获取基本统计量。加 na.rm=TRUE 选 项可以仅对非缺失值计算。sort(x) 返回排序后的结果。rev(x) 把 x 所有元素次序颠倒后返回。quantile(x, c(0.05, 0.95)) 可以求 x 的样本分位数。rank(x) 对 x 求秩得分(即名次,但从最小到最大排列)。
分类变量:table 统计频数。prop.table() 将频数转为百分比。
table 还可以接受两个参数,实现列联表:
对于 table() 的结果列联表,可以用 addmargins() 函数增加行和与列和:
数据框概括
用 colMeans() 对数据框或矩阵的每列计算均值,用 colSums() 对数据框或矩阵的每列计算总和。用 rowMeans() 和 rowSums() 对矩阵的每行计算均值或总和。
分类概括
- tapply
分组概括:
tapply(X, INDEX, FUN)
## F M
## 113.2354 108.1214
with(
d.cancer,
tapply(v0, sex, mean))
- aggregate
可以指定某一列或几列(用list 传递)分组,对指定数据框进行统计计算:
aggregate(
d.cancer[, c("age", "v0", "v1")], list(sex=d.cancer[["sex"]]), mean, na.rm=TRUE)
##sex age v0 v1 ## 1 F 66.14286 113.2354 42.65538 ## 2 M 63.25000 108.1214 45.95524
aggregate() 第一个参数是数据框,第二个参数是列表,列表元素是用来分组或交叉分组的变量,第三个参数是概 括用的函数,概括用的函数的选项可以在后面给出。
- split
split 函数可以把数据框的各行按照一个或几个分组变量分为子集的列表,然后可以用 sapply() 或 vapply() 对每组进行概括。如:
sp <- split(d.cancer[,c("v0","v1")], d.cancer[["sex"]]) sapply(sp, colMeans)