京公网安备 11010802034615号
经营许可证编号:京B2-20210330
R处理数据的案例
将学生的各科考试成绩组合为单一的成绩衡量指标、基于相对名次(前20%,下20%,等等)给出从A到F的评分、根据学生姓氏和名字的首字母对花名册进行排序
代码如下:
[python] view plain copy
print?
options(digits = 2)
Student<-c("John Davis","Angela Williams","Bullwinkle Moose","David Jones",
"Janice Markhammer","Cheryl Cushing","Reuven Ytzrhak","Greg Knox",
"Joel England","Mary Rayburn")
Math<-c(502,600,412,358,495,512,410,625,573,522)
Science<-c(95,99,80,82,75,85,80,95,89,86)
English<-c(25,22,18,15,20,28,15,30,27,18)
roster<-data.frame(Student,Math,Science,English,stringsAsFactors = FALSE)
head(roster)
tail(roster)
z<-scale(roster[,2:4])
score<-apply(z, 1, mean)
roster<-cbind(roster,score)
help(quantile)
y<-quantile(score,c(.8,.6,.4,.2))
str(y)
roster$grade[score>=y[1]]<- "A"
roster$grade[score<y[1]& score>=y[2]]<-"B"
roster$grade[score<y[2]& score>=y[3]]<-"C"
roster$grade[score<y[3]& score>=y[4]]<-"D"
roster$grade[score<y[4]]<-"F"
name<-strsplit((roster$Student)," ")
lastname<-sapply(name,"[",2)
fristname<-sapply(name,"[",1)
roster<-cbind(fristname,lastname,roster[,-1])
roster<-roster[order(lastname,fristname),]
roster[,-9]
以上代码写得比较紧凑,逐步分解如下。
步骤1 原始的学生花名册已经给出了。options(digits=2)限定了输出小数点后数字的位数,
并且让输出更容易阅读。
步骤2 由于数学、科学和英语考试的分值不同(均值和标准差相去甚远),在组合之前需要先让它们变得可以比较。一种方法是将变量进行标准化,这样每科考试的成绩就都是用单位标准差来表示,而不是以原始的尺度来表示了。这个过程可以使用scale()函数来实现。
[python] view plain copy
print?
z
Math Science English
[1,] 0.013 1.078 0.587
[2,] 1.143 1.591 0.037
[3,] -1.026 -0.847 -0.697
[4,] -1.649 -0.590 -1.247
[5,] -0.068 -1.489 -0.330
[6,] 0.128 -0.205 1.137
[7,] -1.049 -0.847 -1.247
[8,] 1.432 1.078 1.504
[9,] 0.832 0.308 0.954
[10,] 0.243 -0.077 -0.697
步骤3 然后,可以通过函数mean()来计算各行的均值以获得综合得分,并使用函数cbind()将其添加到花名册中:
[python] view plain copy
print?
>roster[,-9]
fristname lastname lastname.1 Math Science English score
5 Cheryl Cushing Markhammer 495 75 20 -0.63
6 John Davis Cushing 512 85 28 0.35
2 Joel England Williams 600 99 22 0.92
4 David Jones Jones 358 82 15 -1.16
10 Greg Knox Rayburn 522 86 18 -0.18
8 Janice Markhammer Knox 625 95 30 1.34
9 Bullwinkle Moose England 573 89 27 0.70
7 Mary Rayburn Ytzrhak 410 80 15 -1.05
1 Angela Williams Davis 502 95 25 0.56
3 Reuven Ytzrhak Moose 412 80 18 -0.86
步骤4 函数quantile()给出了学生综合得分的百分位数。可以看到,成绩为A的分界点为0.74,B的分界点为0.44,等等。
[python] view plain copy
print?
> y
80% 60% 40% 20%
0.74 0.44 -0.36 -0.89
步骤5 通过使用逻辑运算符,你可以将学生的百分位数排名重编码为一个新的类别型成绩变量。下面在数据框roster中创建了变量grade
步骤6 你将使用函数strsplit()以空格为界把学生姓名拆分为姓氏和名字。把strsplit()应用到一个字符串组成的向量上会返回一个列表:
[python] view plain copy
print?
name<-strsplit((roster$Student)," ")
[python] view plain copy
print?
> name
[[1]]
[1] "John" "Davis"
[[2]]
[1] "Angela" "Williams"
[[3]]
[1] "Bullwinkle" "Moose"
[[4]]
[1] "David" "Jones"
[[5]]
[1] "Janice" "Markhammer"
[[6]]
[1] "Cheryl" "Cushing"
[[7]]
[1] "Reuven" "Ytzrhak"
[[8]]
[1] "Greg" "Knox"
[[9]]
[1] "Joel" "England"
[[10]]
[1] "Mary" "Rayburn"
步骤7 你可以使用函数sapply()提取列表中每个成分的第一个元素,放入一个储存名字的向量,并提取每个成分的第二个元素,放入一个储存姓氏的向量。"["是一个可以提取某个对象的一部分的函数——在这里它是用来提取列表name各成分中的第一个或第二个元素的。你将使用cbind()把它们添加到花名册中。由于已经不再需要student变量,可以将其丢弃(在下标中使用1)。
步骤8 最后,可以使用函数order()依姓氏和名字对数据集进行排序.
[python] view plain copy
print?
> roster[,-9]
fristname lastname lastname.1 Math Science English score grade
5 Cheryl Cushing Markhammer 495 75 20 -0.63 C
6 John Davis Cushing 512 85 28 0.35 B
2 Joel England Williams 600 99 22 0.92 B
4 David Jones Jones 358 82 15 -1.16 F
10 Greg Knox Rayburn 522 86 18 -0.18 A
8 Janice Markhammer Knox 625 95 30 1.34 D
9 Bullwinkle Moose England 573 89 27 0.70 D
7 Mary Rayburn Ytzrhak 410 80 15 -1.05 C
1 Angela Williams Davis 502 95 25 0.56 A
3 Reuven Ytzrhak Moose 412 80 18 -0.86 F
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数据分析、机器学习的实操场景中,聚类分析与主成分分析(PCA)是两种高频使用的统计与数据处理方法。二者常被用于数据预处理 ...
2026-02-24在聚类分析的实操场景中,K-Means算法因其简单高效、易落地的特点,成为处理无监督分类问题的首选工具——无论是用户画像分层、 ...
2026-02-24数字化浪潮下,数据已成为企业核心竞争力,“用数据说话、用数据决策”成为企业发展的核心逻辑。CDA(Certified Data Analyst) ...
2026-02-24CDA一级知识点汇总手册 第五章 业务数据的特征、处理与透视分析考点52:业务数据分析基础考点53:输入和资源需求考点54:业务数 ...
2026-02-23CDA一级知识点汇总手册 第四章 战略与业务数据分析考点43:战略数据分析基础考点44:表格结构数据的使用考点45:输入数据和资源 ...
2026-02-22CDA一级知识点汇总手册 第三章 商业数据分析框架考点27:商业数据分析体系的核心逻辑——BSC五视角框架考点28:战略视角考点29: ...
2026-02-20CDA一级知识点汇总手册 第二章 数据分析方法考点7:基础范式的核心逻辑(本体论与流程化)考点8:分类分析(本体论核心应用)考 ...
2026-02-18第一章:数据分析思维考点1:UVCA时代的特点考点2:数据分析背后的逻辑思维方法论考点3:流程化企业的数据分析需求考点4:企业数 ...
2026-02-16在数据分析、业务决策、科学研究等领域,统计模型是连接原始数据与业务价值的核心工具——它通过对数据的规律提炼、变量关联分析 ...
2026-02-14在SQL查询实操中,SELECT * 与 SELECT 字段1, 字段2,...(指定个别字段)是最常用的两种查询方式。很多开发者在日常开发中,为了 ...
2026-02-14对CDA(Certified Data Analyst)数据分析师而言,数据分析的核心不是孤立解读单个指标数值,而是构建一套科学、完整、贴合业务 ...
2026-02-14在Power BI实操中,函数是实现数据清洗、建模计算、可视化呈现的核心工具——无论是简单的数据筛选、异常值处理,还是复杂的度量 ...
2026-02-13在互联网运营、产品迭代、用户增长等工作中,“留存率”是衡量产品核心价值、用户粘性的核心指标——而次日留存率,作为留存率体 ...
2026-02-13对CDA(Certified Data Analyst)数据分析师而言,指标是贯穿工作全流程的核心载体,更是连接原始数据与业务洞察的关键桥梁。CDA ...
2026-02-13在机器学习建模实操中,“特征选择”是提升模型性能、简化模型复杂度、解读数据逻辑的核心步骤——而随机森林(Random Forest) ...
2026-02-12在MySQL数据查询实操中,按日期分组统计是高频需求——比如统计每日用户登录量、每日订单量、每日销售额,需要按日期分组展示, ...
2026-02-12对CDA(Certified Data Analyst)数据分析师而言,描述性统计是贯穿实操全流程的核心基础,更是从“原始数据”到“初步洞察”的 ...
2026-02-12备考CDA的小伙伴,专属宠粉福利来啦! 不用拼运气抽奖,不用复杂操作,只要转发CDA真题海报到朋友圈集赞,就能免费抱走实用好礼 ...
2026-02-11在数据科学、机器学习实操中,Anaconda是必备工具——它集成了Python解释器、conda包管理器,能快速搭建独立的虚拟环境,便捷安 ...
2026-02-11在Tableau数据可视化实操中,多表连接是高频操作——无论是将“产品表”与“销量表”连接分析产品销量,还是将“用户表”与“消 ...
2026-02-11