第11天 條件、循環(huán)語句的應用 在所有計算機語言中,條件和循環(huán)語句占據著極其重要的地位,在統(tǒng)計軟件比如SAS,條件語句在數據整理中的地位也舉足輕重。R語言高級編程,條件和循環(huán)語句也類似如此。作為初級教程,今天我們就兩語句在數據整理做簡單的介紹。 一、條件語句 條件語句,最常見的是 if語句。If語句常見的形式有簡單的ifelse 語句 和復雜的if –else if-else語句 1. ifelse 語句 ifelse語句一般可以將變量進行二分類化。 · 向量的if語句使用 > x <- 1:10 > y <- ifelse(x>5,2, 1) # 當x>5時設定y為2,否則y為1 > y [1] 1 1 1 1 1 2 2 2 2 2 · 數據框中if語句的使用 > z<-data.frame(v1=1:5,v2=6:10,v3=11:15) #產生數據框 > z v1 v2 v3 1 1 6 11 2 2 7 12 3 3 8 13 4 4 9 14 5 5 10 15 > y <- ifelse(z$v1>2, 0, 10) #對數據框中的v1變量進行二分類處理 > y [1] 10 10 0 0 0 > z$y<-ifelse(z$v1>2, 0, 10) #在原數據框中增加y這一變量 > z v1 v2 v3 y 1 1 6 11 10 2 2 7 12 10 3 3 8 13 0 4 4 9 14 0 5 5 10 15 0 2. 復雜的if –else if-else語句 復雜的if語句一般與else if 和else連用,整個語句的方式是if (conditon1) {expr1} else if (conditon1){expr2} else{expr3} 翻譯成中文是這樣的: if (條件1) {條件1符合的調用表達式1} else if (條件2){條件1符合的調用表達式2} else{條件1和條件2都不成立調用表達式3} 當使用if,else if, else語句時要注意幾點: 1)if語句可以有零個或一個else,但如果有else if語句,那么else語句必須在else if語句之后。 2)if語句可以有零或多else if語句,else if語句必須放在else語句之前。 3)當有一個else if條件測試成功,其余的else...if或else將不會被測試。 · 簡單的if語句:對一個score值進行判斷! score <- 89 if( score>=0 & score<60){print("不及格")} else {print("成績及格") } 這樣的形式很難看,一般我們會在編寫表達式時進行換行處理,并將表達式縮進: score <- 89 if( score>=0 & score<60){ #條件1 print("不及格") #表達式1 } else { #不滿足條件1的情況 print("成績及格") #表達式2 } 可以發(fā)現,大括號一頭一尾不會在同一行,甚至間隔一行,而同一行卻出現上一個大括號括號和下一個大括號頭括號在一行的現象。這是if語句常見的編程格式。
score <- 89 if( score>=0 & score<60) { print("不及格") } else if(score < 70){ print("及格") } else if(score < 80){ print("中等") } else if(score < 90){ print("良好") } else if(score <= 100){ print("優(yōu)秀") } else{ print("成績不合理") } · If語句無法處理向量的多變量值的情況 對于多記錄的情況,if語句沒法完成,不像SAS一樣。 > if( z$v1<3) { + z$v4<-1 + }else if(z$v1 < 4) { + z$v4<- 2 + }else{ + z$v4<-3 + } Warning message: In if (z$v1 < 3) { : the condition has length > 1 and only the first element will be used > z v1 v2 v3 y v4 1 1 6 11 10 1 2 2 7 12 10 1 3 3 8 13 0 1 4 4 9 14 0 1 5 5 10 15 0 1 對于多記錄,需要結合循環(huán)語句 當使用if,else if, else語句時要注意幾點: 1)if語句可以有零個或一個else,但如果有else if語句,那么else語句必須在else if語句之后。 2)if語句可以有零或多else if語句,else if語句必須放在else語句之前。 3)當有一個else if條件測試成功,其余的else...if或else將不會被測試。 二、 循環(huán)語句 1. 循環(huán)語句 循環(huán)語句最長常見的是for循環(huán),此外還有while循環(huán),repeat循環(huán)。本次內容以for 循環(huán)為例進行講解。 for(var in seq) { expr } #和if語句情況相似。 其中,var為循環(huán)變量;seq為向量表達式,通常是一個序列。Seq語句可以是1:length(),或者seq_along語句。其執(zhí)行過程為,每次從seq中取一個值放入var中,并在循環(huán)體expr中進行使用。 最簡單的舉例 #打印1-10: > for(n in 1:10) { #循環(huán)變量為n,循環(huán)次數seq為10 + print(n) #循環(huán)一次,表達1次(打印n) + } [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 [1] 6 [1] 7 [1] 8 [1] 9 [1] 10 #求和并打印1-100總和 > sum <- 0 > for(i in 1:100){ + sum = sum + i + } > sum [1] 5050 體會下 與以下程序的區(qū)別 sum <- 0 for(i in 1:100){ sum = sum + i print(sum) } 2. 循環(huán)語句 和if語句的聯(lián)合 循環(huán)語句經常與條件語句聯(lián)合,幫助條件語句實現一個變量所有變量值的循環(huán)。其書寫方式是,for語句expr內容改成if語句代碼。 for(var in seq) { expr } 換成 for(var in seq) { if (conditon1) { expr1 } else if (conditon1){ expr2 } else{ expr3 } } 循環(huán)語句聯(lián)合條件語句IF語句 for(i in 1:length(z$v1)){ #length函數常用來獲取變量值的個數 if(z$v1[i]<3){ # z$v1[i]指的是z$v1第i個變量值 z$v4[i]<-1 } else if((z$v1[i]<4)){ z$v4[i]<-2 } else{ z$v4[i]<-3 } } 通過上述函數,我們就根據v1的值,進行變量的轉換,形成新變量v4 > z v1 v2 v3 v4 1 1 6 11 1 2 2 7 12 1 3 3 8 13 2 4 4 9 14 3 5 5 10 15 3 上述問題屬于變量值的轉換,我們在之前第9天已經介紹過,變量值的常用方法,你還記得嗎?今天的if和循環(huán)語句又是一種新的變量值轉換方法了,不妨了解下 · 最后出一道供大家思考 對于不同的數據,以計算一個新變量, 當v1變量<3時候,這個新變量是原來變量i次方; 當v1變量為<4時候,這個變量是原變量的i-1次方; 當v1<5的時候,這個變量是原變量的i-2次方; 當v1>=5的時候,這個變量是上一個變量值+10; 答案明天公布 DAY11的內容就介紹到這里! 最后,一個月就能學會R語言,你敢挑戰(zhàn)一下嗎? 想挑戰(zhàn)的話,請加入R語言的交流群吧?(由于群規(guī)模限制,請先加入鄭老師微信號:掃描以下二維碼,并注明R語言)
|
|
來自: 妙趣橫生統(tǒng)計學 > 《待分類》