R語言基本介紹

基本運算

先來認識一下R語言吧!

print("hello R ")
## [1] "hello R "

R就像一台計算機
來算一下數學,體驗看看計算機的威力
● 加減乘除

8+7-5
## [1] 10
50*99/125
## [1] 39.6

● 進階數學

sqrt(25)
## [1] 5
log(100,10)
## [1] 2
5%%2
## [1] 1

物件式的運算環境

R語言中所有的東西都是一個物件(objects)
物件:名稱、值、種類、結構
● 聯結函數concatenation:c()
阿祥一學期有三次大考,考試分別考國文、英文、數學,他每次考試的總分多少?

Chinese <- c(80,50,30)
English <- c(60,100,85)
Math <- c(60,75,20)
grade <- Chinese+English+Math
grade
## [1] 200 225 135

基本的計算功能

每一段程式都是由物件(objects)、運算符號(operator)和功能(function)所組成的運算式(expression)

● 物件長度:length()

x <- c(1,20,30,55,66)
length(x)
## [1] 5

● 加總sum()、平均mean()、最大值max()、最小值min()、標準差sd()

sum(x)
## [1] 172
mean(x)
## [1] 34.4
max(x)
## [1] 66
min(x)
## [1] 1
sd(x)
## [1] 26.29258

向量的指標用法

一個向量變數x的第i個元素值可以用x[i]表示

x[2]
## [1] 20
x[6]
## [1] NA
x[c(1,2)]
## [1]  1 20

小問題
傑哥喜歡賭博,他這次面對一個豪賭的機會,他該不該加入賭局呢?
目前遇到的賭局如下:
(1) 0.2的機率可以賺1,000元
(2) 0.5的機率可以賺500元
(3) 0.3的機率倒貼2,000元

Tips:結合一個機率物件 = prob,一個金額物件 = reward,並將兩個相乘後做加總,計算出預期報酬
幫幫傑哥決定他要不要加入賭局?

# 要不要加入呢?

認識資料

資料結構

資料主要可分為下列不同種結構
單值(scalar):R語言中沒有scalar
向量(vector):數值、字串、日期
陣列(array)
矩陣(matrix)
資料框(data.frame)
序列(list)
類別(factor)
列聯表(table)

套件下載及讀取

R語言為一個開源性軟體,許多功能都由眾多人一起寫出來的,而各種功能都在每一個「套件」中。
故想要使用特定功能就需要下載該套件,並且讀取套件。
● 套件下載

# install.packages("dplyr")

● 讀取套件

library(dplyr) 

讀取資料:R愛台灣資料

rm(list = ls()) # 刪除環境中所有物件
load("camp.Rdata")

● 確認資料結構

is.data.frame(df)
## [1] TRUE

資料型態

資料可分為以下不同種類
int (interger) :整數
double:雙倍精確度數字,也稱為real或numeric屬性
Complex:複數
logical(Boolean/binary):邏輯(二元)。TRUE(T),FALSE(F)
chr(character):字串
Date:日期/時間

● 資料摘要

summary(df)
##       year       村里代碼           縣市代碼           縣市名稱        
##  Min.   :100   Length:54224       Length:54224       Length:54224      
##  1st Qu.:101   Class :character   Class :character   Class :character  
##  Median :103   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :103                                                           
##  3rd Qu.:105                                                           
##  Max.   :106                                                           
##  鄉鎮市區代碼       鄉鎮市區名稱         村里名稱        
##  Length:54224       Length:54224       Length:54224      
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
##                                                          
##   自然增加人數       社會增加人數         總增加人數       
##  Min.   :-111.000   Min.   :-2217.000   Min.   :-2221.000  
##  1st Qu.:  -6.000   1st Qu.:  -25.000   1st Qu.:  -26.000  
##  Median :   0.000   Median :   -7.000   Median :   -8.000  
##  Mean   :   5.769   Mean   :    1.563   Mean   :    7.332  
##  3rd Qu.:  12.000   3rd Qu.:   10.000   3rd Qu.:   15.000  
##  Max.   : 386.000   Max.   : 4807.000   Max.   : 4840.000  
##    遷入人口數       遷出人口數     鄉鎮區內住址變更之遷入人口數
##  Min.   :   0.0   Min.   :   0.0   Min.   :   0.00             
##  1st Qu.:  35.0   1st Qu.:  42.0   1st Qu.:  15.00             
##  Median :  77.0   Median :  85.0   Median :  43.00             
##  Mean   : 132.9   Mean   : 131.3   Mean   :  76.13             
##  3rd Qu.: 181.0   3rd Qu.: 183.0   3rd Qu.: 107.00             
##  Max.   :4805.0   Max.   :2693.0   Max.   :2869.00             
##  鄉鎮區內住址變更之遷出人口數    粗出生率         粗死亡率     
##  Min.   :   0.0               Min.   : 0.000   Min.   : 0.000  
##  1st Qu.:  16.0               1st Qu.: 5.970   1st Qu.: 5.650  
##  Median :  46.0               Median : 7.990   Median : 7.820  
##  Mean   :  76.1               Mean   : 8.128   Mean   : 8.806  
##  3rd Qu.: 111.0               3rd Qu.:10.050   3rd Qu.:10.990  
##  Max.   :2401.0               Max.   :42.920   Max.   :83.400  
##    自然增加率        社會增加率           粗結婚率         粗離婚率     
##  Min.   :-83.1000   Length:54224       Min.   : 0.000   Min.   : 0.000  
##  1st Qu.: -4.2600   Class :character   1st Qu.: 4.500   1st Qu.: 1.440  
##  Median :  0.0000   Mode  :character   Median : 5.920   Median : 2.170  
##  Mean   : -0.6784                      Mean   : 5.897   Mean   : 2.255  
##  3rd Qu.:  3.6100                      3rd Qu.: 7.280   3rd Qu.: 2.950  
##  Max.   : 42.9200                      Max.   :55.000   Max.   :25.000  
##  出生登記-性比率    老年人戶數      戶長平均年齡    戶長男性人數 
##  Min.   :   0.00   Min.   :   0.0   Min.   : 0.00   Min.   :   0  
##  1st Qu.:  63.89   1st Qu.: 154.0   1st Qu.:53.00   1st Qu.: 271  
##  Median :  90.91   Median : 233.0   Median :56.00   Median : 475  
##  Mean   : 102.72   Mean   : 277.4   Mean   :55.94   Mean   : 622  
##  3rd Qu.: 121.43   3rd Qu.: 352.0   3rd Qu.:59.00   3rd Qu.: 850  
##  Max.   :1100.00   Max.   :2327.0   Max.   :78.00   Max.   :8491  
##   戶長女性人數     納稅單位        綜合所得總額          平均數       
##  Min.   :   0   Min.   :    8.0   Min.   :    2842   Min.   :  272.0  
##  1st Qu.: 132   1st Qu.:  230.0   1st Qu.:  156966   1st Qu.:  660.0  
##  Median : 278   Median :  506.0   Median :  377396   Median :  735.0  
##  Mean   : 439   Mean   :  769.1   Mean   :  705155   Mean   :  798.1  
##  3rd Qu.: 634   3rd Qu.: 1126.0   3rd Qu.:  925695   3rd Qu.:  849.0  
##  Max.   :8070   Max.   :11691.0   Max.   :16148314   Max.   :10727.0  
##      中位數         第一分位數       第三分位數         標準差        
##  Min.   : 171.0   Min.   :  34.0   Min.   : 357.0   Min.   :   207.6  
##  1st Qu.: 513.0   1st Qu.: 314.0   1st Qu.: 818.0   1st Qu.:   550.5  
##  Median : 557.0   Median : 341.0   Median : 912.0   Median :   676.4  
##  Mean   : 575.2   Mean   : 343.8   Mean   : 967.4   Mean   :  1102.6  
##  3rd Qu.: 613.0   3rd Qu.: 368.0   3rd Qu.:1049.0   3rd Qu.:   922.4  
##  Max.   :2528.0   Max.   :1476.0   Max.   :3782.0   Max.   :271373.4  
##     變異係數       各類所得金額合計   各類所得金額營利所得
##  Min.   :  32.16   Min.   :    2842   Min.   :      0     
##  1st Qu.:  81.36   1st Qu.:  156966   1st Qu.:    757     
##  Median :  91.71   Median :  377486   Median :   2098     
##  Mean   : 114.05   Mean   :  705146   Mean   :   4192     
##  3rd Qu.: 109.87   3rd Qu.:  925772   3rd Qu.:   4613     
##  Max.   :2932.69   Max.   :16148823   Max.   :5019613     
##  各類所得金額執行業務所得 各類所得金額薪資所得 各類所得金額利息所得
##  Min.   :     0           Min.   :    2241     Min.   :    22      
##  1st Qu.:  1266           1st Qu.:  125470     1st Qu.:  6250      
##  Median :  3869           Median :  290938     Median : 16094      
##  Mean   :  9115           Mean   :  530671     Mean   : 30615      
##  3rd Qu.: 10518           3rd Qu.:  731677     3rd Qu.: 40051      
##  Max.   :455169           Max.   :10181886     Max.   :520362      
##  各類所得金額租賃及權利金 各類所得金額財產交易所得
##  Min.   :     0           Min.   :     0          
##  1st Qu.:  1405           1st Qu.:   128          
##  Median :  4837           Median :   549          
##  Mean   : 14740           Mean   :  2213          
##  3rd Qu.: 15225           3rd Qu.:  1982          
##  Max.   :676886           Max.   :768196          
##  各類所得金額機會中獎所得 各類所得金額股利所得 各類所得金額退職所得
##  Min.   :    0.0          Min.   :       0     Min.   :     0.0    
##  1st Qu.:  130.0          1st Qu.:   10887     1st Qu.:     0.0    
##  Median :  365.0          Median :   32868     Median :    46.0    
##  Mean   :  754.3          Mean   :   89935     Mean   :   959.6    
##  3rd Qu.: 1001.0          3rd Qu.:   85868     3rd Qu.:   516.0    
##  Max.   :24776.0          Max.   :11337470     Max.   :221234.0    
##  各類所得金額其他所得 各類所得金額稿費所得 各類所得金額申報大於歸戶
##  Min.   :     0       Min.   :    0.0      Min.   : -9082          
##  1st Qu.:  1127       1st Qu.:    0.0      1st Qu.:  3361          
##  Median :  3086       Median :    0.0      Median :  8504          
##  Mean   :  7266       Mean   :  185.5      Mean   : 14500          
##  3rd Qu.:  8158       3rd Qu.:   98.0      3rd Qu.: 18272          
##  Max.   :469341       Max.   :55620.0      Max.   :819815          
##    薪資淨所得      按薪資淨所得計算之綜合所得    稿費收入    
##  Min.   :   1595   Min.   :    2182           Min.   :    0  
##  1st Qu.:  96402   1st Qu.:  127366           1st Qu.:   37  
##  Median : 224924   Median :  310752           Median :  228  
##  Mean   : 429469   Mean   :  604036           Mean   :  987  
##  3rd Qu.: 579739   3rd Qu.:  772046           3rd Qu.:  898  
##  Max.   :9301330   Max.   :15700221           Max.   :83791

資料探索

nrow(df)  #列數
## [1] 54224
ncol(df)  #欄位數
## [1] 49
dim(df)   #維度
## [1] 54224    49
str(df)   
## 'data.frame':    54224 obs. of  49 variables:
##  $ year                        : int  100 100 100 100 100 100 100 100 100 100 ...
##  $ 村里代碼                    : chr  "09007010-001" "09007010-002" "09007010-003" "09007010-004" ...
##  $ 縣市代碼                    : chr  "9007" "9007" "9007" "9007" ...
##  $ 縣市名稱                    : chr  "連江縣" "連江縣" "連江縣" "連江縣" ...
##  $ 鄉鎮市區代碼                : chr  "9007010" "9007010" "9007010" "9007010" ...
##  $ 鄉鎮市區名稱                : chr  "南竿鄉" "南竿鄉" "南竿鄉" "南竿鄉" ...
##  $ 村里名稱                    : chr  "介壽村" "復興村" "福沃村" "清水村" ...
##  $ 自然增加人數                : int  9 7 13 10 4 3 6 3 0 11 ...
##  $ 社會增加人數                : int  35 0 -2 15 7 -4 0 0 -10 29 ...
##  $ 總增加人數                  : int  44 7 11 25 11 -1 6 3 -10 40 ...
##  $ 遷入人口數                  : int  187 71 76 70 33 20 27 10 9 69 ...
##  $ 遷出人口數                  : int  152 72 72 60 31 18 27 11 19 39 ...
##  $ 鄉鎮區內住址變更之遷入人口數: int  20 6 3 17 7 3 6 2 2 5 ...
##  $ 鄉鎮區內住址變更之遷出人口數: int  20 5 9 12 2 9 6 1 2 6 ...
##  $ 粗出生率                    : num  9.48 11.04 20.3 19.12 10.58 ...
##  $ 粗死亡率                    : num  4.99 4.01 2.71 4.41 2.12 ...
##  $ 自然增加率                  : num  4.49 7.02 17.59 14.71 8.47 ...
##  $ 社會增加率                  : chr  "5.49" "-8.03" "1.35" "-14.71" ...
##  $ 粗結婚率                    : num  4.99 5.02 4.06 14.71 12.7 ...
##  $ 粗離婚率                    : num  1 0 1.35 0 2.12 0 2.02 0 0 1.11 ...
##  $ 出生登記-性比率            : num  72.7 120 87.5 116.7 150 ...
##  $ 老年人戶數                  : int  131 88 56 26 40 32 35 12 13 55 ...
##  $ 戶長平均年齡                : int  55 59 57 50 60 64 55 62 60 55 ...
##  $ 戶長男性人數                : int  282 138 100 90 69 47 71 13 17 115 ...
##  $ 戶長女性人數                : int  146 66 42 49 39 13 40 12 9 72 ...
##  $ 納稅單位                    : num  580 247 210 179 134 67 127 30 44 227 ...
##  $ 綜合所得總額                : num  564204 249096 226461 168706 121210 ...
##  $ 平均數                      : num  973 1008 1078 942 905 ...
##  $ 中位數                      : num  796 802 932 751 755 682 690 580 820 750 ...
##  $ 第一分位數                  : num  442 455 526 426 458 467 418 465 416 440 ...
##  $ 第三分位數                  : num  1266 1354 1393 1244 1228 ...
##  $ 標準差                      : num  740 839 983 788 607 ...
##  $ 變異係數                    : num  76.1 83.2 91.2 83.6 67.1 ...
##  $ 各類所得金額合計            : num  566026 249113 226560 169134 121460 ...
##  $ 各類所得金額營利所得        : num  6560 1114 3186 3215 329 ...
##  $ 各類所得金額執行業務所得    : num  2782 1091 492 348 509 ...
##  $ 各類所得金額薪資所得        : num  484338 214743 181051 150106 108426 ...
##  $ 各類所得金額利息所得        : num  22361 8483 7311 5953 6364 ...
##  $ 各類所得金額租賃及權利金    : num  6464 940 2941 1862 212 ...
##  $ 各類所得金額財產交易所得    : num  609 172 290 124 11 ...
##  $ 各類所得金額機會中獎所得    : num  441 163 288 63 87 35 54 11 2 72 ...
##  $ 各類所得金額股利所得        : num  33870 20248 28127 6398 4734 ...
##  $ 各類所得金額退職所得        : num  655 0 42 0 0 0 0 0 0 24 ...
##  $ 各類所得金額其他所得        : num  4418 700 558 644 287 ...
##  $ 各類所得金額稿費所得        : num  0 2 0 0 0 0 0 0 0 0 ...
##  $ 各類所得金額申報大於歸戶    : num  3530 1457 2275 423 502 ...
##  $ 薪資淨所得                  : num  409281 182034 153112 125860 91409 ...
##  $ 按薪資淨所得計算之綜合所得  : num  489147 216387 198522 144460 104194 ...
##  $ 稿費收入                    : num  302 266 189 76 185 57 198 0 81 80 ...

● 傳回資料框架變數

df[2] %>% head(6)
##       村里代碼
## 1 09007010-001
## 2 09007010-002
## 3 09007010-003
## 4 09007010-004
## 5 09007010-005
## 6 09007010-006
df["村里名稱"]  %>% head(6)
##   村里名稱
## 1   介壽村
## 2   復興村
## 3   福沃村
## 4   清水村
## 5   仁愛村
## 6   津沙村

● 傳回向量

head(df$"縣市代碼",6)
## [1] "9007" "9007" "9007" "9007" "9007" "9007"
head(df[["year"]],10)
##  [1] 100 100 100 100 100 100 100 100 100 100

資料探索實用技巧

找出資料中不重複的值

● unique()

unique(df$"縣市名稱")
##  [1] "連江縣" "金門縣" "宜蘭縣" "桃園市" "新竹縣" "苗栗縣" "彰化縣"
##  [8] "南投縣" "雲林縣" "嘉義縣" "屏東縣" "臺東縣" "花蓮縣" "澎湖縣"
## [15] "基隆市" "新竹市" "嘉義市" "臺北市" "高雄市" "新北市" "臺中市"
## [22] "臺南市"

根據不同物件進行計算

tapply(想要計算的物件,根據那些物件計算,函數)

tapply(df$"自然增加人數",df$"縣市名稱",mean)
##     宜蘭縣     花蓮縣     金門縣     南投縣     屏東縣     苗栗縣 
## -0.6114844 -3.5549273 19.2173913 -4.3681049 -5.9421004  1.9791341 
##     桃園市     高雄市     基隆市     連江縣     雲林縣     新北市 
## 18.5850665  2.3103172 -3.5941765  4.5294118 -4.4799115 13.8780454 
##     新竹市     新竹縣     嘉義市     嘉義縣     彰化縣     臺中市 
## 21.6214623 10.5315789  1.9676871 -6.0852341  5.0063061 15.6509714 
##     臺北市     臺東縣     臺南市     澎湖縣 
## 23.0911654 -5.1992225  1.3642085  0.5508982

大小排列

● sort(), order()
decreasing = T 代表由大排列至小,原本設定(default)為由小排至大。

sort(tapply(df$"自然增加人數",df$"縣市名稱",mean)) #直接顯示值
##     嘉義縣     屏東縣     臺東縣     雲林縣     南投縣     基隆市 
## -6.0852341 -5.9421004 -5.1992225 -4.4799115 -4.3681049 -3.5941765 
##     花蓮縣     宜蘭縣     澎湖縣     臺南市     嘉義市     苗栗縣 
## -3.5549273 -0.6114844  0.5508982  1.3642085  1.9676871  1.9791341 
##     高雄市     連江縣     彰化縣     新竹縣     新北市     臺中市 
##  2.3103172  4.5294118  5.0063061 10.5315789 13.8780454 15.6509714 
##     桃園市     金門縣     新竹市     臺北市 
## 18.5850665 19.2173913 21.6214623 23.0911654
order(tapply(df$"自然增加人數",df$"縣市名稱",mean)) #顯示序列位置
##  [1] 16  5 20 11  4  9  2  1 22 21 15  6  8 10 17 14 12 18  7  3 13 19

資料型態轉換

● as.numeric(),as.character…..
將特定資料型態轉換為指定型態,如文字轉數值。

as.numeric(df$"縣市代碼") %>% class()
## [1] "numeric"