数据汇总

  • summary

对一个数据框 d,用 summary(d) 可以获得每个连续型变量的基本统计量,和每个离散取值变量的频率。以及分类变量的各种类型的统计结果。如:

  1. > summary(CO2)
  2. Plant Type Treatment conc
  3. Qn1 : 7 Quebec :42 nonchilled:42 Min. : 95
  4. Qn2 : 7 Mississippi:42 chilled :42 1st Qu.: 175
  5. Qn3 : 7 Median : 350
  6. Qc1 : 7 Mean : 435
  7. Qc3 : 7 3rd Qu.: 675
  8. Qc2 : 7 Max. :1000
  9. (Other):42
  10. uptake
  11. Min. : 7.70
  12. 1st Qu.:17.90
  13. Median :28.30
  14. Mean :27.21
  15. 3rd Qu.:37.12
  16. Max. :45.50
  • str

对数据框 d,用 str(d) 可以获得各个变量的类型和取值样例。如:

  1. > str(CO2)
  2. Classes nfnGroupedData’, nfGroupedData’, groupedData and 'data.frame': 84 obs. of 5 variables:
  3. $ Plant : Ord.factor w/ 12 levels "Qn1"<"Qn2"<"Qn3"<..: 1 1 1 1 1 1 1 2 2 2 ...
  4. $ Type : Factor w/ 2 levels "Quebec","Mississippi": 1 1 1 1 1 1 1 1 1 1 ...
  5. $ Treatment: Factor w/ 2 levels "nonchilled","chilled": 1 1 1 1 1 1 1 1 1 1 ...
  6. $ conc : num 95 175 250 350 500 675 1000 95 175 250 ...
  7. $ uptake : num 16 30.4 34.8 37.2 35.3 39.2 39.7 13.6 27.3 37.1 ...
  8. - attr(*, "formula")=Class 'formula' language uptake ~ conc | Plant
  9. .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv>
  10. - attr(*, "outer")=Class 'formula' language ~Treatment * Type
  11. .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv>
  12. - attr(*, "labels")=List of 2
  13. ..$ x: chr "Ambient carbon dioxide concentration"
  14. ..$ y: chr "CO2 uptake rate"
  15. - attr(*, "units")=List of 2
  16. ..$ x: chr "(uL/L)"
  17. ..$ y: chr "(umol/m^2 s)"

还有一个pillar::glimpse 函数,更简洁:

  1. > glimpse(CO2)
  2. Rows: 84
  3. Columns: 5
  4. $ Plant <ord> Qn1, Qn1, Qn1, Qn1, Qn1, Qn1, Qn1, Qn2, Qn2, Qn2, Qn
  5. $ Type <fct> Quebec, Quebec, Quebec, Quebec, Quebec, Quebec, Queb
  6. $ Treatment <fct> nonchilled, nonchilled, nonchilled, nonchilled, nonc
  7. $ conc <dbl> 95, 175, 250, 350, 500, 675, 1000, 95, 175, 250, 350
  8. $ 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 还可以接受两个参数,实现列联表:

基本R 的数据处理 - 图1

对于 table() 的结果列联表,可以用 addmargins() 函数增加行和与列和:

基本R 的数据处理 - 图2

数据框概括

用 colMeans() 对数据框或矩阵的每列计算均值,用 colSums() 对数据框或矩阵的每列计算总和。用 rowMeans() 和 rowSums() 对矩阵的每行计算均值或总和。

分类概括

  • tapply

分组概括:

  1. tapply(X, INDEX, FUN)
  2. ## F M
  3. ## 113.2354 108.1214
  4. with(
  5. d.cancer,
  6. tapply(v0, sex, mean))
  • aggregate

可以指定某一列或几列(用list 传递)分组,对指定数据框进行统计计算:

  1. aggregate(
  2. d.cancer[, c("age", "v0", "v1")], list(sex=d.cancer[["sex"]]), mean, na.rm=TRUE)
  3. ##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() 对每组进行概括。如:

  1. sp <- split(d.cancer[,c("v0","v1")], d.cancer[["sex"]]) sapply(sp, colMeans)