感谢Robert I.Kabacoff 著作本书,同时感谢高涛、肖楠、陈钢编译此书。
最近在学习《R语言实战》,特将学习过程记录下来,供各位朋友参考,虽说是笔记,但是90%是书中内容,另外10%是自己偶尔冒出的一点点想法的记录和一些疑问,希望互相探讨。末尾有本章的代码清单下载地址,与各位交流,还是提倡按照书中内容把代码一个个敲出来。
第五章 高级数据管理
本章内容
数学和统计函数
字符处理函数
循环和条件执行
自编函数
数据整合与重塑
5.1 一个数据处理难题
一个难题:
- 三科成绩是无法比较的。
- 需要一种方法来确定某个学生在前述得分上百分比排名。
- 表示姓名的字段只有一个,需要将姓和名拆开。
5.2 数值和字符处理函数
本节将学习R中作为数据处理基石的函数,它们可分为数值(数学、统计、概率)函数和字符处理函数。
5.2.1 数学函数
书中表5-2列出了常用的数学函数和简短的用例。(P83页)
值得一提的是round(x, digits = n) 表示将x舍入为指定位的小数。
signif(x, digits = n)表示将x舍入为指定的有效数字位数。
对比如下
round(3.475, digits = 2)
返回值为3.48。(保留两位小数)
signif(3.475, n= = 2)
返回值为3.5。(保留两位有效数字)
表5-2中的示例将数学函数应用到了标量(单独的数值)上。当这些函数被应用于数值向量、矩阵或者数据框时,它们会作用于其中每一个独立的值,然后重新生成一个向量、矩阵或数据框。
5.2.2 统计函数
方差:表示点的离散程度。方差越小,离散程度越低,越接近平均值。公式表达为:
S=[ (x1-x)^2+(x2-x)^2+(x3-x)^2+……+(xn-x)^2]
标准差是方差开根号。
什么是绝对中位差、分位数、值域、滞后差分、进化中心化、标准化?
代码清单5-1 均值和标准差的计算
x <- c(1, 2, 3, 4, 5, 6, 7, 8)
简洁的方式
mean(x)
sd(x)
冗长的方式
n <- length(x)
meanx <- sum(x)/n
css <- sum((x - meanx)^2)
sdx <- sqrt(css / (n-1))
meanx
sdx
第二种方式中修正平方和(css)的计算过程是很有启发性的:
(1) x等于c(1, 2, 3, 4, 5, 6, 7, 8),x的平均值等于4.5(length(x)返回了x中元素的数量):
(2) (x - meanx)从x中的每个元素中减去了4.5,结果为c(-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5)
(3) (x - meanx)^2将(x - meanx)的每个元素求平方,结果为c(12.25, 6.25, 2.25, 0.25, 0.25, 2.25, 6.25, 12.25)
(4) summ((x - meanx)^2)对((x - meanx)^2)的所有元素求和,结果为42。
数据的标准化
将一组数据,投射到很小区间内的方法,便于分析。标准化之后的数据有这样的特征:均值为0,标准差为1。
函数scale()对矩阵或数据框的制定了进行均值为0,标准差为1的标准化。
newdata <- scale(mydata
要对每一列进行任意均值和标准差的标准化,可以使用如下代码:
newdata <- scale(mydata) * SD + M
其中SD表示想要的标准差,M表示想要的均值。注意,在非数值型的列上用scale()函数会报错。如果要对指定列而不是整个数据框或矩阵进行标准化,可以使用如下代码:
newdata <- transform(mydata, myvar = scale(myvar) * 10 + 50)
此句将变量myvar标准化为均值50、标准差为10的变量。
问:是否