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

来源:互联网 发布:如何制作云免流软件 编辑:程序博客网 时间:2024/05/17 09:15

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为还原的原始数据




0 0
原创粉丝点击