[R] 2.高级数据管理

R in action整理

1.数值处理函数

1)数学函数

abs(x),sqrt(x),ceiling(x),floor(x),trunc(x)取整,

round(x,digits=n)舍入为n位的小数,signif(x,digits=n)舍入有效位数为n的数

2)统计函数

mean(y),median(y),sd(y),var(y),,sum(y),min(y),max(y),range(y)求值域

quantile(y,probs)求分位数scale(x,center=TURE,scale=TRUE)中心化或标准化

diff(x,lag=n)n阶之后差分

3)概率函数

d=密度函数,p=分布函数,q=分位数函数,r=生成随机数

dpqrdistributi_abbreviation()

分布名称

缩写

二项分布

binom

卡方分布(非中心)

chisq

柯西分布

cauchy

指数分布

exp

F分布

f

t分布

t

均匀分布

unif

几何分布

geom

4)字符处理函数及其他

subsrt(x,start,stop):提取或替换字符串向量中的子串4)字符处理函数及其他

strsplit(x,split):在split处分割x中的元素

grep(pattern,x):在x中搜索pattern

pretty(x,n):创建美观的分割点,将连续变量x分割为n个区间

5)函数用于矩阵和数据框

应用到特定维度上:apply(x,MARGIN,FUN,...),其中MARGIN为维度下标,1行2列

2.示例

1)将成绩转变为可比较的单元

2)确定学生在整体中的排名百分比并制定等级

3)将姓和名拆开

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,stringsAsFactors=FALSE)

options(digits=2)  #设定保留两位小数

temp<-scale(roster[,2:4])  #scale()函数,对rooster表的2-4列对应的成绩标准化

score<-apply(temp,1,mean)  #apply()函数,对temp的行做均值计算,1行2列

roster1<-cbind(roster,score)  #拼接新数据框:rooster+socre

temp<-quantile(roster1$score,c(0.8,0.6,0.4,0.2))  #quantile()函数计算分位数

roster1$grade[roster1$score>=temp[1]]<-"A"

roster1$grade[roster1$score<=temp[1] & score>=temp[2]]<-"B"

roster1$grade[roster1$score<=temp[2] & score>=temp[3]]<-"C"

roster1$grade[roster1$score<=temp[3] & score>=temp[4]]<-"D"

roster1$grade[roster1$score<temp[4]]<-"F"  #根据计算出的分位数对成绩进行划分

name<-strsplit((roster1$student)," ")  #strsplit()函数拆分student

firstname<-sapply(name,"[",1)  #sapply()函数提取成分,"["是一个可以提取某个对象的一部分的函数

lastname<-sapply(name,"[",2)  #接上,"["的使用前提为对象已被拆分

roster2<-cbind(firstname,lastname,roster1[,-1])  #[,-1]除第一个变量其余都要 

roster<-roster2[order(lastname,firstname),]  #将roster按照要求进行排列

3.控制流

statement:语句,cond:条件,expr:表达式,seq:序列

①重复和循环

for(var in seq) statement

while (cond) statement

②条件执行

if (cond) statement else

ifelse(cond, statement1, statement2)

switch(expr,...)

4.整合和重构

①转置 t()

②整合数据 reshape2包

猜你喜欢

转载自blog.csdn.net/Edward_is_1ncredible/article/details/81035095