#5高级数据管理
y<-data.frame(name=character(0),math=numeric(0),science=numeric(0),english=numeric(0))
mydata<-edit(y)
mydata
#5.2数值和字符处理函数
#5.2.1数学函数
#5.2.2统计函数
dada<-scale(mydata)#数据标准化
#5.2.3概率函数
set.seed()#设定随机种子
runif(5)#生成服从正态分布的伪随机数
#生成服从多元正太分布的数据
library(MASS)
options(digits=3)
set.seed(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(500,mean,sigma)
mydata<-as.data.frame(mydata)
names(mydata)<-c("y","x1","x2")
dim(mydata)
head(mydata,n=10)
#5.2.4字符处理函数
#5.2.5其他实用函数
#5.2.6将函数应用于矩阵和数据框
#将函数应用于数据对象
a<-5
sqrt(a)
b<- c(1.243,5.654,2.99)
round(b)
c<-matrix(runif(12),nrow=3)
c
log(c)
mean(c)
#将一个函数应用到矩阵的所有行或列中
mydata<-matrix(rnorm(30),nrow=6)
mydata
apply(mydata,1,mean)#计算每行平均值
apply(mydata,2,mean)#计算每列平均值
apply(mydata,2,mean,trim=0.2)#计算每行平均值
#5.3数据处理难题的一套解决方案
options(digits=2)
setwd("e:/r")
library(xlsx)
student<-read.xlsx("student.xlsx",1)
student
roster<-data.frame(student,math,science,english,
stringAsFactor=FASLE)
z<-scale(#未完)
5-6
options(digits=2)
student<-c("J D","A W","B M",
"D J","J M","C C",
"R Y","G K","J E",
"M R")
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,stringAsFactors=FALSE)
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]]<-"F"
roster
class(roster$student)
roster$student<-as.character(roster$student)
name <- strsplit((roster$student)," ")#roster$student必须是字符变量才能用strsplit?
LN<-sapply(name, "[",2)
FN<-sapply(name, "[",1)
roster<-cbind(FN,LN,roster[,-1])
roster<-roster[order(LN,FN),]
roster
#5.4控制流
#5.4.1重复和循环
for( i in 1:10) print("H")
i<-10
while(i>0) {print("h");i<- i-1}
#5.4条件执行
#5.4.1 if-else
attach(roster)
if(is.character(math)) math<-as.factor(math)
if(!is.character(LN)) math<-as.factor(LN)else print("gggg")
#5.4.2 ifelse,二元,输入输出均为向量时
attach(roster)
ifelse(score>0.5,print("P"),print("f"))
outcome<-ifelse(score>0.5,"P","f")
5.4.3switch
feelings<-c("s","a")
for(i in feelings)
print(
switch(i,
h="iii",
a="tttt",
s="ccc",
a="ccc"))
#5.5用户自编函数
mystats<-function(x,parametric=TRUE,print=FALSE){
if(parametric){center<-mean(x);spread<-sd(x)
}else{
center<-median(x);spread<-mad(x)
}
if(print¶metric){
cat("mean=",center,"\n","sd=",spread,"\n")
}else{
cat("median=",center,"\n","mad=",spread,"\n")
}
result<-list(center=center,spread=spread)
return(result)
}
#验证
set.seed(1234)
x<-rnorm(500)
y<-mystats(x,parametric=TRUE,print=FALSE)
#自编函数2
mydate<-function(type="long"){
switch(type,
long=format(Sys.time(),"%A %B %d %Y"),
short=format(Sys.time(),"%m-%d-%y"),
cat(type,"is not a recognizede type\n"))}
mydate("long")
mydate("short")
mydate()
mydate("dvsdf")
5.6整合和重构
5.6.1转置
cars<-mtcars[1:5,1:4]
cars
t(cars)
5.6.2整合数据
options(digits=3)
attach(mtcars)
mtcars
aggdata<-aggregate(mtcars,by=list(cyl,gear),FUN=mean,na.rm=TRUE)
aggdata
5.6.3reshape包融合和重铸melt,dcast
library(reshape2)
md<-melt(mydata,id=c("id,time"))