【R语言学习8】R语言高级数据管理方法简介(1)
1数学函数
2统计函数
3概率函数
4字符处理函数
5其他使用函数
6实践示例
问题:一组学生参加了数学、科学和英语考试。为了给所有学生确定一个单一的成绩衡量指标,需要将这些科目的成绩组合起来。另外,你还想将前20%的学生评定为A,接下来20%的学生评定为B,依次类推。最后,你希望按字母顺序对学生排序。数据如图所示。
思考:首先,三科考试的成绩是无法比较的。由于它们的均值和标准差相去甚远,所以对它们求平均值是没有意义的。在组合这些考试成绩之前,必须将其变换为可比较的单元。其次,为了评定等级,需要一种方法来确定某个学生在前述得分上百分比排名。再次,表示姓名的字段只有一个,这让排序任务复杂化了。为了正确地将其排序,需要将姓和名拆开。
解答:
1. 创建roster数据集
2. 由于数学、科学和英语考试的分值不同(均值和标准差相去甚远),在组合之前需要先让它们变得可以比较。这个过程可以使用统计函数中的scale()函数来实现。
3. 通过函数mean()来计算各行的均值以获得综合得分,并使用函数cbind()将其添加到花名册中。
这里需要着重介绍apply()函数:apply()函数,可将一个任意函数“应用”到矩阵、数组、数据框的任何维度上。apply()函数的使用格式为:apply(x, MARGIN, FUN, ...),其中,x为数据对象,MARGIN是维度的下标(MARGIN=1表示行,MARGIN=2表示列),FUN是由你指定的函数,而...则包括了任何想传递给FUN的参数。如图代码含义为计算z数据集中每一行的均值并返回给score,然后利用cbind()函数合并数据集。
4. 题中前20%的学生评定为A,接下来20%的学生评定为B,依次类推的意思为分别以80%,60%,40%,20%定义等级,即将score按照0.8,0.6,0.4,0.2的百分比划分。如图结果所示,80%的临界点为0.74,60%的零界点为0.44,依此类推。使用quantile()函数实现。
5. 通过使用逻辑运算符,将学生的百分位数排名重编码为一个新的类别型成绩
变量。下面在数据框roster中创建了变量grade。
6. 你将使用函数strsplit()以空格为界把学生姓名拆分为姓氏和名字。
7.使用函数sapply()提取列表中每个成分的第一个元素,放入一个储存名字
的向量Firstname,并提取每个成分的第二个元素,放入一个储存姓氏的向量Lastname。"["是一个可以提取某个对象的一部分的函数——在这里它是用来提取列表name各成分中的第一个或第二个元素的。你将使用cbind()把它们添加到花名册中。由于已经不再需要student变量,可以将其丢弃(在下标中使用–1,roster[,-1])。
8. 最后,可以使用函数order()依姓氏和名字对数据集进行排序:
本文以《R语言实战》的资料为例,为大家展示了不同的函数代码以及在具体问题中的应用,然而要熟练应用这些函数,必须在日常生活中勤学苦练。同时目前R语言的学习社区发展迅速,很多人制作了包并有详细的解读,如针对具体项目,我们也可参考其官方帮助文档进行学习,而在具体过程中可不必深入研究高级数据管理的方法。
参考资料:
卡巴, 科弗, 高涛, 等. R 语 言 实 战[J]. 2013.