您的位置:首页 > 其它

R软件学习笔记-3(基本函数与运算)

2015-05-10 18:40 429 查看
unique函数

从集合中删除重复的元素

unique(ReportCard$sex) #获得sex的类别值,检查性别取值范围是否正确

ReportCard$sex<-factor(ReportCard$sex,levels=c(1,2),labels=c("M","F")) #分类变量值的重新编码,将性别为1的替换为M,为2的替换为F

subset函数

条件筛选

#提取男生(性别为M)的数据,条件筛选

MaleScore1<-subset(ReportCard,ReportCard$sex=="M") #条件筛选函数subset

fix(MaleScore1)

等价于

Sel1<-ReportCard$sex=="M"

MaleScore1<-ReportCard[Sel1,] #利用位置向量实现数据筛选

提取男生(性别为M)且平均成绩不及格(小于60分)的学生数据

MaleScore2<-subset(ReportCard,ReportCard$sex=="M" & ReportCard$avScore=="E")

等价于:

Sel2<-(ReportCard$sex=="M" & ReportCard$avScore<60)

MaleScore2<-ReportCard[Sel2,]

随机筛选

set.seed(10000) #设置随机种子,初始值为10000

bh<-sample(1:60,size=30,replace=FALSE) #bh是位置向量,通过随机抽样产生,无放回方式

bh

MySample<-ReportCard[bh,] #间接利用位置向量实现成绩的随机抽样

保存数据集

write.table(ReportCard,file="ReportCard.txt",sep=" ",quote=FALSE,append=FALSE,na="NA",row.names=FALSE,col.names=TRUE)

if 结构

Price<-scan() #scan生成向量或列表

if(Price<200) print("No discount!")

if(Price>=200 & Price<500) print("off 3%")

if(Price>500 & Price<1000) print("off 5%")

if(Price>=1000 & Price<2500) print("off 8%")

if(Price>=2500 & Price<5000) print("off 10%")

if(Price>=5000) print("off 15%")

switch实现

Price<-scan()

if(Price<200) F<-1 else { #利用if给F赋值

if(Price>=200 & Price<500) F<-2 else {

if(Price>500 & Price<1000) F<-3 else {

if(Price>=1000 & Price<2500) F<-4 else{

if(Price>=2500 & Price<5000) F<-5 else

F<-6

}

}

}

}

print(switch(F,"No discount","off 3%","off 5%","off 8%","off 10%","off 15%")) #利用switch对F的值进行判断

for循环

s=0

for(i in 1:100){

s=s+i

}

print(s)

while循环

s<-0 #和,初始值为0

i<-1 #循环控制变量i,初始值为1

while(i<=100){ #当循环控制变量i<=100时进入循环体

s<-s+i

i<-i+1 #改变循环控制变量的值使其可能大于100

}

print(s) #当循环控制变量的值为101时跳出循环并输出计算结果

repeat循环

s<-0

i<-1

repeat{ #无条件进入循环体

if(i<=100){

s<-s+i

i<-i+1} else #改变循环控制变量的值使其可能大于100

break #当i大于100时强行跳出循环并输出计算结果

}

print(s)

举个栗子

MyTable<-function(mytable){ #自定义函数MyTable

rows<-dim(mytable)[1]

cols<-dim(mytable)[2]

DataTable<-NULL

for(i in 1:rows){

for(j in 1:mytable$freq[i]){

RowData<-mytable[i,c(1:(cols-1))]

DataTable<-rbind(DataTable,RowData)

}

}

row.names(DataTable)<-c(1:dim(DataTable)[1])

return(DataTable)

}

Grade<-rep(c("B","C","D","E"),times=2) #组织分数等级数据,分数等级重复2次

Sex<-rep(c("M","F"),each=4) #组织性别数据,取值各重复4次

Freq<-c(2,11,12,5,2,13,10,3) #组织汇总数据

Table<-data.frame(sex=Sex,grade=Grade,freq=Freq) #Table是数据框,域freq存放频数

MyData<-MyTable(Table) #调用自定义函数,Table是一个数据框

Table

MyData #MyData为还原的原始数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: