---------------R语言的作业题,如有不对欢迎指正------------------
一、 数据处理
1、 导入数据 agriculture.txt,将其命名为 agr。
(1) 检测数据框中缺失值,并删除缺失值
(2) 在 agr 中创建新变量存储 x2,x8 均值,在 agr 中创建新变量分别存储 x4,x5;数据标准化后值,并删除 x2,x4,x5,x8
(3) 将 date 转化为日期值,并将变量重命名为 TimeDate
(4) 选择 145>x1>65 的观测,再随机抽取 8 个样本(无放回)
(5) 按 x3 从高到低排序。
(1) 检测数据框中缺失值,并删除缺失值
> setwd("C:\\Users\\admin\\Desktop\\data\\course\\Rlearn\\shiyan\\shiyan2")
> agr= read.table("agriculture.txt",header = T)
> head(agr)
> is.na(agr)#检测缺失值是否存在##大数据慎用
> agr=na.omit(agr)#删除含有缺失值的行
(2) 在 agr 中创建新变量存储 x2,x8 均值,在 agr 中创建新变量分别存储 x4,x5;数据标准化后值,并删除 x2,x4,x5,x8
> options(digits = 2)#设置小数
> mean28=apply(agr[,c("x2","x8")],1,mean)#提取两列后按行计算均值
> scale45=scale(agr[,c("x4","x5")],center=T,scale=T)
> agr=cbind(agr,mean28,scale45)
> agr=agr[c(-3,-5,-6,-9)]##删除不要的列
(3) 将 date 转化为日期值,并将变量重命名为 TimeDate
> agr$TimeDate=as.Date(agr$date,"%d/%m/%Y")#产生新的一列转化为日期型
> agr=agr[,-7]
> head(agr)
(4) 选择 145>x1>65 的观测,再随机抽取 8 个样本(无放回)
> agr1=agr[agr$x1>65 & agr$x1<145,]
> N=nrow(agr1)
> library(sampling)
> s=srswor(8,N) #从 N 个单元里简单随机抽取 8 标记
> agr2=getdata(agr1,s) #获取简单随机抽样样本数据
> head(agr2)
(5) 按 x3 从高到低排序。
> regar=agr2[order(-agr2$x3),]
> regar
2、 设定随机种子3,模拟生成1000 个参数 n=10,p=0.4 的二项分布随机数,并计算其均值和方差与理论结果进行比较。
> options(digits = 7)#设置小数
> ####第二题
> set.seed(3)
> data1=rbinom(1000,10,0.4)
> mean(data1)
> var(data1)
3、 假设某高校 500 名女生血清蛋白含量(g/L)服从均值为 75,标准差为 3 的正态分布。
(1) 设定随机种子 5,模拟生成 500 女生血红蛋白含量的数据,并计算标准差,
四分位数。
> set.seed(5)
> data2=rnorm(500,75,3)
> sd(data2)
> quantile(data2,probs=c(0.25,0.5,0.75),na.rm=TRUE) #计算分位数
(2) 此正态分布下显著性水平为 10%的置信区间(双侧)为?这些女生数据有多少个处于这个置信区间内。
> t.test(data2,alternative = "two.side",mu=75,conf.level = 0.1)
> count=0###计数置信区间里有多少个姐姐
> for(i in data2){
+ if(74.96689 <=i & i<=75.00083){
+ count=count+1
+ }
+ }
> print(count)
二、自编函数
4、自编函数计算威布尔分布概率密度值。
> weibull=function(x,lambda,k){
+ if(x>=0){
+ if(lambda>0 & k>0){
+ f=(k/lambda)*((x/lambda)^(k-1))*exp(-(x/lambda)^k)
+ return(f)
+ }else{
+ return("lambda或k不符合要求")
+ }
+ }else{
+ return(0)
+ }
+ }
> weibull(7,3,4)