使用R处理数据难题的一套解决方案

options(digits=2)
student <- c("John Davis","Angela Williams","Bullwinkle Moose")
Math <- c(502,600,412)
Science <- c(95,99,80)
English <- c(25,22,18)
roster <- data.frame(student,Math,Science,English)
z <- scale(roster[,2:4])
score <- apply(z,1,mean)
roster <- cbind(roster,score)
y <- quantile(score,c(.8,.6,.4,.2))
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]] <- "E"
name <- strsplit((roster$student)," ")
lastname <- sapply(name,"[",2)
firstname <- sapply(name,"[",1)
roster <- cbind(firstname,lastname,roster[,-1])
roster <- roster[order(lastname,firstname),]

解释:
步骤一、原始的学生花名册已经给出了,同时限定了输出小数点后两位数字,让输出更容易阅读
步骤二、由于数学、科学、英语的分值不同(均值和标准差相距甚远),在组合之前需要让他们变得可比较,一种方法是将变量进行标准化,这样每科的考试成绩都是用单位标准差来表示,而不是原始的尺度来表示了。
步骤三、通过mean()函数来计算各行的均值以获得综合得分,并使用函数cbind()将其添加到花名册中。
步骤四、给出学生综合得分的百分位数。
步骤五、通过逻辑运算符,将学生的百分位数排名重编码为一个新的类别型成绩变量。
步骤六、使用strsplit()函数以空格为界把学生姓名拆分为姓氏和名字。此函数应用到字符串组成的向量上会返回一个列表。
步骤七、使用sapply()函数提取列表中每个成分的第一个元素,放入一个储存名字的向量,并提取每个成分的第二个元素,放入一个储存姓氏的向量。”[“是一个可以提取某个对象的一部分的函数,在这里它是用来提取列表name的第一个或第二个元素的。使用cbind将他们添加到花名册中,并舍弃student这个变量。
步骤八、最后,可以使用order()依姓氏和名字对数据集进行排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值