5、高级数据管理


主要是数字的处理,字符的处理

1、一个数据处理难题

2、数值和字符处理函数

1、数学函数

	#(1)数学函数
	abs(-4)#取绝对值
	floor(3.455)#取整函数
	log(10)#取对数
	log10(10)
	round(3.475,digits = 2)#保留两位小数
	round(3.425,digits=2)#等于靠近的偶数

2、统计函数

	mean(c(1,2,3,4,5))#求均值
	var(c(1,2,3,4,5))#求方差
	sd(c(1,2,3,4,5))#求标准差
	y<-quantile(c(1,2,3,4,5,6,7,8,9,10),c(0.2,0.99))#求分位数
	y

3、概率函数

	#(3)概率函数
	beta#贝塔分布
	norm#正态分布
	cauchy#柯西分布
	#d=密度函数
	#p=分布函数
	#q=分位数函数
	#r=生成随机数
	
	x<-pretty(c(-3,3),30)
	x#生成31个数
	
	y<-dnorm(x)#标准正态分布
	
	plot(x,y)#画出图形
	
	pnorm(1.96)#当x为1.96时分布函数值,概率
	
	qnorm(0.9,mean = 500,sd=100)#分位数
	
	rnorm(50,mean=30,sd=10)

实例:生成服从多元正态分布的数据

	#实例
	install.packages("MASS")
	library(MASS)
	options(digits = 3)#设置全局小数点位数为3
	set.seed(1234)#设置全局的随机数为1234
	mean<-c(230.7,146.7,3.6)
	sigma<-matrix(c(15360.8,6721.2,-47.1,
	                6721.2,4700.9,-16.5,
	                -47.1,-16.5,0.3),nrow=3,ncol=3)
	mydata<-mvrnorm(50000,mean,sigma)#生成服从分布的数据
	mydata<-as.data.frame(mydata)#将数据转换成数据框
	names(mydata)<-c("y","x1","x2")#重新命名

4、字符处理函数

	x="aaabbbccc"
	nchar(x)#字符串长度
	substr(x,3,6)#截取x的3-6字符

5、其他实用函数

	#(5)其他实用函数
	xx<-c(2,5,6,8)
	length(xx)#求向量的长度
	
	yy<-seq(1,10,2)#从1到10每个两位生成一个数
	
	zz<-rep(1:3,3)#1到3重复三次
	zz

6、将函数应用于矩阵和数据框

	#(6)将函数用于矩阵和数据框
	b<-c(1.243,5.654,2.99)
	b
	b2<-round(b)#四舍五入
	b2
	c<-matrix(runif(12),nrow=3)
	c
	mean(c)
	apply(c, 1,mean)#按行求均值
	apply(c, 2,mean)#按列求均值

3、数据处理难题的一套解决方法

	# 建立学生成绩表
	Student <- c("John Davis","Angela Williams","Bullwinkle Moose",
	             "David Jones","Janice Markhammer",
	             "Cheryl Cushing","Reuven Ytzrhak",
	             "Grclass(roster$Student)#是字符串eg 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,否则里面的元素会变成因子
	
	#步骤1:限定小数位数
	options(digits = 2)
	roster
	
	#步骤2:将成绩进行标准化
	z<-scale(roster[,2:4])#将2到4列转成标准分数
	z
	
	#步骤3:求平均分
	score<-apply(z,1,mean)#计算每一行的均值
	score
	
	roster<-cbind(roster,score)#拼接
	
	#步骤4:求分位数(定级别)
	y=quantile(roster$score,c(0.8,0.6,0.4,0.2))#四个分位点
	
	#步骤5:按分位数给成绩评定等级
	roster$grade[roster$score>=y[1]]<-"A"
	roster$grade[roster$score<y[1]&roster$score>=y[2]]<-"B"
	roster$grade[roster$score<y[2]&roster$score>=y[3]]<-"C"
	roster$grade[roster$score<y[3]&roster$score>=y[4]]<-"D"
	roster$grade[roster$score<y[4]]<-"E"
	
	#步骤6:拆分first name和last name
	name<-strsplit((roster$Student)," ")
	
	#步骤7:把拆开后的名字放回数据集中
	fisrtname<-sapply(name,"[",1)
	lastname<-sapply(name,"[",2)
	roster<-cbind(fisrtname,lastname,roster[-1])#减去第一列
	
	#步骤8:按照lastname排序
	roster<-roster[order(lastname,fisrtname),]

4、控制流

	#5.4控制流
	#5.4.1重复和循环
	for (i in 1:10) print("hello")
	
	i=10
	while (i>0) {
	  print("hello");
	  i<-i-1;
	}
	
	#5.4.2条件执行
	(1)if(i==1){
	  print("nihao")
	}else{
	  print("bye")
	}
   (2)#简便写法
	ifelse(i==1,print("yes"),print("no"))#条件,结果一,结果二
	(3)switch多条件多结果
	#switch的用法是将输出结果进行转换
	feelings<-c("sad","afraid")
	for(i in feelings)
	  print(
	    switch(i,
	          happy="h",
	          afraid="af",
	          sad="s",
	          angry="an"
	    )
	  )

5、自编函数

	#5.5用户自编函数
	#5.5.1if-else结构自编函数
	
	mystas<-function(x,parametric=TRUE,print=FALSE){
	  #计算什么
	  if(parametric){
	    center<-mean(x);spread<-sd(x)
	  }else{
	    center<-median(x);spread<-mad(x)#计算中位数和绝对分位差
	  }
	  #怎么输出
	  if(print&parametric){
	    cat("mean",center,"\n","sd=",spread,"\n")
	  }else if(print&!parametric){
	    cat("median",center,"\n","MAD=",spread,"\n")
	  }
	  result<-list(center=center,spread=spread)
	  return(result)
	}
	set.seed(1234)#让随机数可控
	x<-rnorm(500)
	x
	y<-mystas(x)
	y1<-mystas(x,parametric=FALSE,print=TRUE)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值