R语言里的多层循环和嵌套的用法

可以先列出提纲,也就是大框架,列框架时,须注意。

if(){}else{}  表示先执行if括号后面的条件语句,如果正确就执行第一个大括号里的程序,如果错误就执行else后面大括号里的语句。
    但是如果出现下面的情况就会报错:

if{}

else{}
   也就是else语句没有在大括号的后面,这是r会认为if语句已经执行完毕,但执行else发现前面无法执行,else必须紧挨着if语句后的大括号,这时才不会出错。为了避免出现漏大括号,和出现错误,我们可以先列出提纲:

我的数据处理中要用到两个循环,循环是嵌套的,嵌套的循环中包含三种情况(if),第一种情况里面包含三个条件分支(也就是三种情况)(if-else if -else);第二种情况里也包含三个条件分支(也就是三种情况)(if-else if -else);第三种情况里也包含一个条件分支else(也就是yi种情况):

草稿如下:

if (条件1) {
      if  (条件1-1) {
    print()
      }else if  (条件1-1) {
                print()
      }else {#条件1-3
              print()
               }
}else if (条件2) {
               if (条件2-1) {
               print()
               }else if (条件2-2) {
                print()
               }else{#条件2-2
               print()
              }
}else {#(条件3)
           print()
          }

然后框架写好以后只需要把条件换成自己所要求的条件就行了,然后把print语句换成想要输出的形式就行了,这一点和python相比落后一点,不能够自动缩进,很费劲,敬请期待用python实现。下面的代码是我根据自己的需求填写的代码,看起来很充实吧

setwd("c:/users/11565/Desktop/合并二/可以用数据")
sentiment<-read.csv("001.csv")
names(sentiment)
dim(sentiment)
attach(sentiment)
sentiment$date<-as.character(sentiment$date)#转换成字符串
#删除含有确认的噪声数据(如确认收货之类),重复六次可以全部删除
for (j in 1:6){ 
  for (i in (1:length(sentiment$c_bianhao))){
    if ("确" %in% unlist(strsplit(sentiment$date[i], "")) == T)
      sentiment=sentiment[-i,]
    else{
      sentiment[i,]=sentiment[i,]
    }
  }
}
dim(sentiment)
table(sentiment$date)
sentiment<-sentiment[c(1:31600),]
detach()

#对sentiment_value1进行分类计算
for (i in (1:length(sentiment$c_bianhao)))
{
  if (sentiment_value1[i]>=0.7)
  {sentiment$critic1[i]=1
  sentiment$class1[i]="好评"}
  if (sentiment_value1[i]<0.7 & sentiment_value1[i]>0.3)
  {sentiment$critic1[i]=2
  sentiment$class1[i]="中评"}
  if (sentiment_value1[i]<=0.3 && sentiment_value1[i]>0)
  {sentiment$critic1[i]=-1
  sentiment$class1[i]="差评"} 
}
#对sentiment_value2进行分类计算
for (i in (1:length(sentiment$c_bianhao)))
{
  if (sentiment_value2[i]>=0.7){
    sentiment$critic2[i]=1
    sentiment$class2[i]="好评"}
  if (sentiment_value2[i]<0.7 & sentiment_value2[i]>0.3)
  {sentiment$critic2[i]=2
  sentiment$class2[i]="中评"}
  if (sentiment_value2[i]<=0.3 & sentiment_value2[i]>=0)
  {sentiment$critic2[i]=-1
  sentiment$class2[i]="差评"}
}
detach()
#
write.table(sentiment,"sentiment.csv",sep=",",col.names = T,row.names = F)
sentiment<-read.csv("sentiment.csv",na.strings="",stringsAsFactors = F)#已经定义好class,和去噪声的表格
x10<-table(sentiment$c_bianhao)
write.table(x10,"x10.csv",sep=",",col.names = T,row.names = F)
x10<-read.csv("x10.csv",stringsAsFactors = F)
c_bianhao1<-x10[,1]
head(sentiment)

for (i in (1:length(c_bianhao1))){
  x11<-subset(sentiment,sentiment$c_bianhao==c_bianhao1[i])
  date1<-table(x11$date)
  write.table(date1,"date1.csv",sep=",",col.names = T,row.names = F)
  date1<-read.csv("date1.csv",stringsAsFactors = F)
  date1<-date1[,1]
  for (j in (1:length(date1))){
    x12<-subset(x11,x11$date == date1[j])
     x13<-aggregate(x12$critic1,by=list(class=x12$class1),sum)
    #转换成了数据框
    x13<-t(as.data.frame(x13))
    colnames(x13)<-x13[1,]
    x13<-as.data.frame(x13)
    x14<-dim(x13)
    #是一种类型的解法
    if (x14[2]==1) {
      if  (x13[1,1]=="差评") {
        x15$差=x13[,1]
        x15$中=c("中评",0)
        x15$好=c("好评",0)
        x15$c_bianhao=c(c_bianhao1[i],c_bianhao1[i])
        x15$date=c(date1[j],date1[j])
        zonghe<-rbind(zonghe,x15)
      }else if  (x13[1,1]=="中评") {
        x15$差=c("差评",0)
        x15$中=x13[,1]
        x15$好=c("好评",0)
        x15$c_bianhao=c(c_bianhao1[i],c_bianhao1[i])
        x15$date=c(date1[j],date1[j])
        zonghe<-rbind(zonghe,x15)
      }else {x15$差=c("差评",0)
      x15$中=c("中评",0)
      x15$好=x13[,1]
      x15$c_bianhao=c(c_bianhao1[i],c_bianhao1[i])
      x15$date=c(date1[j],date1[j])
      zonghe<-rbind(zonghe,x15)
      }
    }else if (x14[2]==2) {
      if ((x13[1,1]=="差评") & (x13[1,2]=="中评")) {
        x15$差=x13[,1]
        x15$中=x13[,2]
        x15$好=c("好评",0)
        x15$c_bianhao=c(c_bianhao1[i],c_bianhao1[i])
        x15$date=c(date1[j],date1[j])
        zonghe<-rbind(zonghe,x15)
      }else if (x13[1,1]=="差评" & x13[1,2]=="好评") {
        x15$差=x13[,1]
        x15$中=c("中评",0)
        x15$好=x13[,2]
        x15$c_bianhao=c(c_bianhao1[i],c_bianhao1[i])
        x15$date=c(date1[j],date1[j])
        zonghe<-rbind(zonghe,x15)
      }else{
        x15$差=c("差评",0)
        x15$中=x13[,2]
        x15$好=x13[,1]
        x15$c_bianhao=c(c_bianhao1[i],c_bianhao1[i])
        x15$date=c(date1[j],date1[j])
        zonghe<-rbind(zonghe,x15)
      }
    }else{
      x15$差=x13[,1]
      x15$中=x13[,2]
      x15$好=x13[,3]
      x15$c_bianhao=c(c_bianhao1[i],c_bianhao1[i])
      x15$date=c(date1[j],date1[j])
      zonghe<-rbind(zonghe,x15)
    }
  }
}
 

  • 7
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值