1. 程式人生 > >R語言——程式設計邏輯(案例分析)

R語言——程式設計邏輯(案例分析)

迴圈語句
for,while語句

> a<-10
> a
[1] 10
> for(i in 1:59){
+     a[i]<-i*2+3
+ }
> a
 [1]   5   7   9  11  13  15  17
 [8]  19  21  23  25  27  29  31
[15]  33  35  37  39  41  43  45
[22]  47  49  51  53  55  57  59
[29]  61  63  65  67  69  71  73
[36]  75  77  79  81  83  85  87
[43]
89 91 93 95 97 99 101 [50] 103 105 107 109 111 113 115 [57] 117 119 121
> b<-5
> i<-1
> while(b[i]<121){
+     i=i+1
+     b[i]=b[i-1]+2
+ }
> b
 [1]   5   7   9  11  13  15  17
 [8]  19  21  23  25  27  29  31
[15]  33  35  37  39  41  43  45
[22]  47  49  51  53  55  57  59
[29]  61  63  65  67  69  71  73
[36]  75  77  79  81  83  85  87
[43]  89  91  93  95  97  99 101
[50] 103 105 107 109 111 113 115
[57] 117 119 121

If…..else語句

> x<-9
> if(x>-10){
+     x<-x+10#滿足x為10時執行語句
+ }else{
+     x<-x+5#否則的話執行該條語句
+ }
> x
[1] 19

向量化程式設計
案例1:在Data1.csv資料中,某些變數的資料存在缺失值,查詢資料缺失值的比例
正常操作程式碼
將從國家統計局金融機構人民幣年底餘額信貸收支資料下載。

> Data1<-read.csv("D:\\資料分析的資料集\\jinrong.csv")
> str(Data1)
'data.frame':   41
obs. of 4 variables: $ 指標 : Factor w/ 35 levels " 經營貸款",..: 34 32 21 12 5 6 14 5 6 17 ... $ X2015年: int 1541204 1357022 1345783 546078 202869 343209 430247 174586 255661 241832 ... $ X2016年: int 1759952 1505864 1497169 597751 231630 366121 502178 215107 287072 270379 ... $ X2017年: int 1931934 1641044 1630577 643768 248239 395529 542405 237888 304517 304853 ... > is.na(Data1) 指標 X2015年 X2016年 X2017年 [1,] FALSE FALSE FALSE FALSE [2,] FALSE FALSE FALSE FALSE [3,] FALSE FALSE FALSE FALSE [4,] FALSE FALSE FALSE FALSE [5,] FALSE FALSE FALSE FALSE [6,] FALSE FALSE FALSE FALSE [7,] FALSE FALSE FALSE FALSE [8,] FALSE FALSE FALSE FALSE [9,] FALSE FALSE FALSE FALSE [10,] FALSE FALSE FALSE FALSE [11,] FALSE FALSE FALSE FALSE [12,] FALSE FALSE FALSE FALSE [13,] FALSE FALSE FALSE FALSE [14,] FALSE FALSE FALSE FALSE [15,] FALSE FALSE FALSE FALSE [16,] FALSE FALSE FALSE FALSE [17,] FALSE FALSE FALSE FALSE [18,] FALSE FALSE FALSE FALSE [19,] FALSE FALSE FALSE FALSE [20,] FALSE FALSE FALSE TRUE [21,] FALSE FALSE FALSE FALSE [22,] FALSE FALSE FALSE FALSE [23,] FALSE FALSE FALSE FALSE [24,] FALSE FALSE TRUE FALSE [25,] FALSE FALSE FALSE FALSE [26,] FALSE FALSE FALSE FALSE [27,] FALSE FALSE FALSE FALSE [28,] FALSE FALSE FALSE FALSE [29,] FALSE FALSE FALSE TRUE [30,] FALSE FALSE FALSE FALSE [31,] FALSE FALSE FALSE FALSE [32,] FALSE FALSE FALSE FALSE [33,] FALSE FALSE FALSE FALSE [34,] FALSE FALSE FALSE FALSE [35,] FALSE FALSE FALSE FALSE [36,] FALSE FALSE FALSE FALSE [37,] FALSE FALSE FALSE FALSE [38,] FALSE FALSE FALSE FALSE [39,] FALSE FALSE FALSE FALSE [40,] FALSE FALSE FALSE FALSE [41,] FALSE FALSE FALSE FALSE > Nanum<-length(Data1[is.na(Data1)] + Nanum Error: unexpected symbol in: "Nanum<-length(Data1[is.na(Data1)] Nanum" > Nanum<-length(Data1[is.na(Data1)])

向量化思路
簡單的說,就是將資料裡的型別自動轉化成數字,定義1,0,將所有1加起來,也就是我們所接觸的缺失值,然後再根據要求求解。

> Data1<-read.csv("D:\\資料分析的資料集\\jinrong.csv")
> str(Data1)
'data.frame':   41 obs. of  4 variables:
 $ 指標   : Factor w/ 35 levels "        經營貸款",..: 34 32 21 12 5 6 14 5 6 17 ...
 $ X2015年: int  1541204 1357022 1345783 546078 202869 343209 430247 174586 255661 241832 ...
 $ X2016年: int  1759952 1505864 1497169 597751 231630 366121 502178 215107 287072 270379 ...
 $ X2017年: int  1931934 1641044 1630577 643768 248239 395529 542405 237888 304517 304853 ...
> is.na(Data1)
       指標 X2015年 X2016年 X2017年
 [1,] FALSE   FALSE   FALSE   FALSE
 [2,] FALSE   FALSE   FALSE   FALSE
 [3,] FALSE   FALSE   FALSE   FALSE
 [4,] FALSE   FALSE   FALSE   FALSE
 [5,] FALSE   FALSE   FALSE   FALSE
 [6,] FALSE   FALSE   FALSE   FALSE
 [7,] FALSE   FALSE   FALSE   FALSE
 [8,] FALSE   FALSE   FALSE   FALSE
 [9,] FALSE   FALSE   FALSE   FALSE
[10,] FALSE   FALSE   FALSE   FALSE
[11,] FALSE   FALSE   FALSE   FALSE
[12,] FALSE   FALSE   FALSE   FALSE
[13,] FALSE   FALSE   FALSE   FALSE
[14,] FALSE   FALSE   FALSE   FALSE
[15,] FALSE   FALSE   FALSE   FALSE
[16,] FALSE   FALSE   FALSE   FALSE
[17,] FALSE   FALSE   FALSE   FALSE
[18,] FALSE   FALSE   FALSE   FALSE
[19,] FALSE   FALSE   FALSE   FALSE
[20,] FALSE   FALSE   FALSE    TRUE
[21,] FALSE   FALSE   FALSE   FALSE
[22,] FALSE   FALSE   FALSE   FALSE
[23,] FALSE   FALSE   FALSE   FALSE
[24,] FALSE   FALSE    TRUE   FALSE
[25,] FALSE   FALSE   FALSE   FALSE
[26,] FALSE   FALSE   FALSE   FALSE
[27,] FALSE   FALSE   FALSE   FALSE
[28,] FALSE   FALSE   FALSE   FALSE
[29,] FALSE   FALSE   FALSE    TRUE
[30,] FALSE   FALSE   FALSE   FALSE
[31,] FALSE   FALSE   FALSE   FALSE
[32,] FALSE   FALSE   FALSE   FALSE
[33,] FALSE   FALSE   FALSE   FALSE
[34,] FALSE   FALSE   FALSE   FALSE
[35,] FALSE   FALSE   FALSE   FALSE
[36,] FALSE   FALSE   FALSE   FALSE
[37,] FALSE   FALSE   FALSE   FALSE
[38,] FALSE   FALSE   FALSE   FALSE
[39,] FALSE   FALSE   FALSE   FALSE
[40,] FALSE   FALSE   FALSE   FALSE
[41,] FALSE   FALSE   FALSE   FALSE
> NAA<-mean(is.na(Data1))
> NAA
[1] 0.01829268

案例2:在資料Data2中,如果x小於3或x>-8,則將資料中的所有滿足條件的值替換成NA。

一般程式設計思路方法

 Data2<-c(rep(4,3),1:11,rep(5,3),5:10)
> Data2
 [1]  4  4  4  1  2  3  4  5  6  7  8  9 10 11  5  5  5
[18]  5  6  7  8  9 10
> for (i in 1:length(Data2)){
+     if(Data2[i]<=3|Data2[i]>=8){
+         Data2[i]<-NA
+     }
+ }
> Data2
 [1]  4  4  4 NA NA NA  4  5  6  7 NA NA NA NA  5  5  5
[18]  5  6  7 NA NA NA

向量化程式設計思路方法

Data3<-c(rep(4,3),1:11,rep(5,3),5:10)
Data3
Nain<-which(Data3<=3|Data3>=8)
Data3[Nain]<-NA
Data3