一、(40 分)
请使用 nycflight13 回答以下问题:
(1) 请用 flights 表单找出出发时间没有延误,但是到达时间的所有航班。
(2)在(1)数据的基础上计算到达每个目的地的航班数量,平均飞行距离和平
均到达延误时间。
(3)在(2)的基础上在一张图中画出平均到达延误时间和平均飞行距离关系的
散点图和平滑曲线图。
(4)用 flights 数据,然后根据 origin 和 time_hour 两个变量与 weather 表格进行
左连接。
二、(20 分)
请用 map 函数从 1 到 100 中随机抽取 10 组数,这 10 组数的样本量分别为 10:19;然后
计算这 10 组数的均值和标准差
三、(20 分)
请编写函数分别完成以下两个问题:
(1)编写函数 get.root(a, b, c),求解一元二次方程ܽݔଶ ܾ ܿ ݔൌ 0的实根;
(2)已知某一元二次方程ܽݔଶ ܾ ܿ ݔൌ 0的三个系数都是随机变量,其中 a 服从[1, 5]上的
均匀分布, b 服从正态分布 N(3, 10), c 服从均值为 1 的指数分布。请编写函数 get.prob(),
计算该方程有实根的概率。
四、(20 分)
请编写一个函数,能够将一个向量中的字符串按逆序排序。我们通常使用的字符串排序是根
据字符串的首字母从小到大排序,所谓逆序排序是指根据字符串的尾字母从小到大排序,例
如:
c("economics", "employment", "management", "finance")
的逆序排序结果是:
c("finance", "economics", "management", "employment"
下面一一给出问题的解答
library(nycflights13) #加载包
library(dplyr)#数据处理
colnames(flights)=c("年","月","日","起飞时间","计划起飞时间","起飞延误",
"到达时间","计划到达时间","到达延误","承运商缩写",
"flight","飞机尾号","始发地","目的地","空中时间",
"机场间距","hour","minute","time_hour" )#修改列名
df=flights
head(df) #查看数据
library(tidyverse) #加载包
shuju=df%>%
filter(起飞延误 == 0 & 到达延误 != 0)#出发时间无延误,到达时间有延误的航班
shuju%>%
group_by(目的地)%>%
count()#每个目的地的航班数量
anyNA(shuju$flight)#检查有无缺失数据
shuju1=shuju%>%
group_by(目的地)%>%
summarise(Mean=mean(flight)) # 平均飞行距离
anyNA(shuju$到达延误)#检查有无缺失数据
shuju2=shuju%>%
group_by(目的地)%>%
summarise(Mean=mean(到达延误)) #平均到达延误时间
这里的结果就不展示了
shuju3=left_join(x = shuju1,y = shuju2,by="目的地" )
a=colors()
b=sample(a,99,replace=F)
ggplot(shuju3,aes(x=Mean.y,y=Mean.x,fill=目的地))+
geom_point(shape=21,alpha=0.8,colour="black")+
geom_smooth()+
scale_fill_manual(values=b)#画出平均到达延误时间和平均飞行距离关系的
散点图和平滑曲线图
df=df%>%
rename(origin=始发地)
left_join(weather,df,by=c("origin","time_hour")) #左连接
第二问
data=list()
f=function(x){
a=c(10:19)
for(i in seq_along(a) ){
data[[i]]=sample(x,a[i],replace=T)
}
data }
d=map(100,f)#生成列表
a=list()
for(i in 1:10){
a[i]=d[[1]][i]
}
sapply(a,mean) #
sapply(a,sd)
第三问
get.root=function(a,b,c){
discrim<-b^2-4*a*c
if(discrim>0){
roots<-c((-b+sqrt(b^2-4*a*c))/(2*a),(-b-sqrt(b^2-4*a*c))/(2*a))
}else{
if(discrim==0){
roots<- -b/(2*a)
} else{
roots<-c()}
}
roots } #求根函数
#基于蒙特卡罗模拟
a=runif(10000,1,5)
b=rnorm(10000,3,10)
c=rexp(10000,1)
get.prob=function(a,b,c){
discrim=b^2-4*a*c
sum(discrim>=0)/10000 }
get.prob(a,b,c)
第四问
w=c("economics", "employment", "management", "finance")
C=c(length(w))
data=data.frame(letters,shu=1:26)
rownames(data)=letters
fd=function(x){
a=nchar(x)
for(i in 1:length(a)){
C[i]=substr(x[i],a[i],a[i])
}
b=data[C,]$shu
x[order(b)] } #排序函数
以上就是关于问题的所有解答,如有更好的方法可以留言,也可以加我博客好友,一起学习,一起交流。