R語言——程式設計邏輯(案例分析)
阿新 • • 發佈:2019-02-17
迴圈語句
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