概述
可以先列出提纲,也就是大框架,列框架时,须注意。
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)
}
}
}
最后
以上就是淡然白开水为你收集整理的R语言里的多层循环和嵌套的用法的全部内容,希望文章能够帮你解决R语言里的多层循环和嵌套的用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复