R语言实用案例分析-1

来源:互联网 发布:晚吃姜如砒霜 知乎 编辑:程序博客网 时间:2024/05/16 10:21

在日常生活和实际应用当中,我们经常会用到统计方面的知识,比如求最大值,求平均值等等。R语言是一门统计学语言,他可以方便的完成统计相关的计算,下面我们就来看一个相关案例。

1. 背景

最近西安交大大数据专业二班,开设了Java和大数据技术课程,班级人数共100人。

2. 需求

通过R语言完成该100位同学学号的生成,同时使用R语言模拟生成Java和大数据技术成绩,成绩满分为100,需要满足正态分布,成绩生成后,求出:1.同学们的各科总分。2. 各科平均分。3.求最高分的同学。4.求出这两门课程的关系。


实现思路:

1. 首先需要生成100位同学的学号,学号按照从小到大进行排序,可以使用seq函数,关于seq的使用,可以查看帮助文档

   seq(3116393030,3116393130)

  得到结果

 

2. 通过rnorm生成2门正态分布的成绩。

   rnorm(100,mean=80,sd=11),此处生成了均值为80,标准差为11的100个学生成绩。运行结果如下:



3. 以上结果有2个问题,第一:成绩的小数点过多,我们保留整数,第二:由于满分成绩为100,结果出现了大于100的成绩,我们将大于100的成绩设置为100

使用round函数取得整数

round(rnorm(100,mean=80,sd=11))


把结果中大于100的值设置为100,也就是满分为100

x<-round(rnorm(100,mean=80,sd=11))
x[x>100]=100
x

结果如下:


4. 同样的道理,我们在生成另外一门课程的成绩,在这里我们为了练习,使用runif生成均匀分布的随机数。

使用runif生成100个最小值为80,最大值为100的均匀分布函数

y<-runif(100,min=80,max=100)
round(y)

结果如下:


5. 把生成的学号,2门课程的成绩生成dataframe结构,我们把以上代码做个调整,并且运行。

num<-seq(3116393031,3116393130)

x<-round(rnorm(100,mean=80,sd=11))
x[x>100]=100

y<-round(runif(100,min=80,max=100))

info<-data.frame(num,x,y)
info

结果如下:


.....

6. 求每个学生两门的平均成绩,通过z列进行表示

z<-rowMeans(info[,-1])#去除第一列后求行均值
info1<-data.frame(num,x,y,z) #重新组合成一个dataframe

结果如下:


....

7. 求每个同学的总分,并且通过z列显示出来

  使用apply函数将sum应用在需要进行加操作的列上,比如第2列和第3列

z<-apply(info1[,c("x","y")],1,sum)
info2<-data.frame(num,x,y,z)

结果如下:


......

8. 找出总成绩最高的同学的学号

通过which.max找出总分最大的列,然后找出相应的学号

info2[which.max(info2[,c("z")]),][,1]

结果如下:


9. 显示同学总分的柱状图

hist(info2$z)

从上面的柱状图可以看出总成绩的分布情况

以上R案例分析内容属于抛砖引玉,如有不足地方,欢迎批评指正。



1 0