fLoc <- "https://cpcheng.neocities.org/Rbook/01/data/Quality_of_Life.txt"
dta <- read.table(file = fLoc, header = TRUE)
class(dta)
## [1] "data.frame"
#看看dta維度:多少行、多少欄

```r
dim(dta)
## [1] 2077    7

#利用names看看變項名稱

names(dta)
## [1] "性別" "教育" "年齡" "視力" "聽力" "移動" "溝通"

#看前六筆

head(dta)
##   性別 教育     年齡 視力 聽力 移動 溝通
## 1   女 專科 56到60歲 1.00 1.33  1.2  1.0
## 2   女 大學 66到70歲 1.00 1.33  1.2  1.5
## 3   男 大學 76到80歲 1.00 1.33  1.0  1.0
## 4   女 專科 81歲以上 2.67 2.00  1.0  1.0
## 5   男 專科 71到75歲 1.67 2.33  1.0  1.0
## 6   女 大學 56到60歲 1.00 1.00  1.0  1.0

#看後六筆

tail(dta)
##      性別 教育     年齡 視力 聽力 移動 溝通
## 2072   女 大學 61到65歲 1.00 1.00 1.00  1.0
## 2073   女 高中 56到60歲 1.00 1.33 1.25  1.0
## 2074   女 高中 66到70歲 1.67 1.00 1.60  1.5
## 2075   女 專科 71到75歲 1.00 1.00 2.00  1.0
## 2076   男 初中 66到70歲 1.00 1.00 1.00  1.0
## 2077   女 初中 81歲以上 1.00 1.00 1.38  1.0

#看前十筆

head(dta, 10)
##    性別 教育     年齡 視力 聽力 移動 溝通
## 1    女 專科 56到60歲 1.00 1.33 1.20  1.0
## 2    女 大學 66到70歲 1.00 1.33 1.20  1.5
## 3    男 大學 76到80歲 1.00 1.33 1.00  1.0
## 4    女 專科 81歲以上 2.67 2.00 1.00  1.0
## 5    男 專科 71到75歲 1.67 2.33 1.00  1.0
## 6    女 大學 56到60歲 1.00 1.00 1.00  1.0
## 7    男 專科 76到80歲 1.00 1.33 1.00  1.0
## 8    女 專科 81歲以上 3.67 1.33 2.33  1.0
## 9    女 小學 56到60歲 1.33 1.00 1.20  1.0
## 10   女 專科 56到60歲 1.00 1.00 1.00  1.0

#看看第一列第一欄對應資料

dta[1, 1]
## [1] "女"

這是類別資料

#看看第九列,這是資料框架

class(dta[9, ])
## [1] "data.frame"

#看看第一欄,這「不是」資料框架,是類別資料

class(dta[,1])
## [1] "character"

#前者是類別變項,後者是資料框架

class(dta[,'教育'])
## [1] "character"
class(dta['教育'])
## [1] "data.frame"

#還是資料框架

class(dta[5:7, c('視力','聽力')])
## [1] "data.frame"

檢視資料結構

str(dta)
## 'data.frame':    2077 obs. of  7 variables:
##  $ 性別: chr  "女" "女" "男" "女" ...
##  $ 教育: chr  "專科" "大學" "大學" "專科" ...
##  $ 年齡: chr  "56到60歲" "66到70歲" "76到80歲" "81歲以上" ...
##  $ 視力: num  1 1 1 2.67 1.67 1 1 3.67 1.33 1 ...
##  $ 聽力: num  1.33 1.33 1.33 2 2.33 1 1.33 1.33 1 1 ...
##  $ 移動: num  1.2 1.2 1 1 1 1 1 2.33 1.2 1 ...
##  $ 溝通: num  1 1.5 1 1 1 1 1 1 1 1 ...

看看類別變項的屬性,有五個level的categorical variable

attributes(dta[, "教育"])
## NULL

將變項的attribute改變

dta[,1:3] <- lapply(dta[, 1:3], factor)

用table指令檢視類別變項分佈

table(dta[, "教育"])
## 
## 大學 小學 初中 高中 專科 
##  466  107  163  188 1153

將類別變項轉成數值變項,再利用table檢視之

table(as.numeric(dta[, '教育']))
## 
##    1    2    3    4    5 
##  466  107  163  188 1153

summary是常用指令(command),使用在不同的物件(object)上,有不同的結果

當summary用在data frame

summary(dta['教育'])
##    教育     
##  大學: 466  
##  小學: 107  
##  初中: 163  
##  高中: 188  
##  專科:1153

當summary出現在類別變項前

summary(dta[,'教育'])
## 大學 小學 初中 高中 專科 
##  466  107  163  188 1153

還記得class這個指令嗎?

#這一個

class(dta[,'視力'])
## [1] "numeric"

#另一個

class(dta['視力'])
## [1] "data.frame"

#當class加上指令t(轉置矩陣),於是資料框架被轉成矩陣了

class(t(dta['視力']))
## [1] "matrix" "array"

平均數的兩種寫法

#第一個很直接,只是如果有遺漏值就麻煩了

dta$功能 <- (dta$聽力 + dta$移動 + dta$溝通)/3;head(dta$功能)
## [1] 1.176667 1.343333 1.110000 1.333333 1.443333 1.000000

#第二個則可以警告是否有遺漏值

tail(dta$功能 <- rowMeans(dta[, 5:7]))
## [1] 1.000000 1.193333 1.366667 1.333333 1.000000 1.126667

#summary指令又出現了

summary(dta)
##  性別        教育            年齡          視力            聽力      
##  女:1201   大學: 466   56到60歲:393   Min.   :1.000   Min.   :1.000  
##  男: 876   小學: 107   61到65歲:456   1st Qu.:1.000   1st Qu.:1.000  
##            初中: 163   66到70歲:383   Median :1.000   Median :1.000  
##            高中: 188   71到75歲:283   Mean   :1.208   Mean   :1.302  
##            專科:1153   76到80歲:217   3rd Qu.:1.330   3rd Qu.:1.330  
##                        81歲以上:345   Max.   :4.000   Max.   :4.000  
##       移動            溝通            功能      
##  Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:1.000   1st Qu.:1.000   1st Qu.:1.000  
##  Median :1.000   Median :1.000   Median :1.133  
##  Mean   :1.515   Mean   :1.078   Mean   :1.298  
##  3rd Qu.:1.800   3rd Qu.:1.000   3rd Qu.:1.467  
##  Max.   :4.000   Max.   :4.000   Max.   :4.000

標準差的計算

sd(dta$功能)
## [1] 0.3663786

#再來認識一個新的指令-with

with(dta, sd(功能))
## [1] 0.3663786

安裝與載入

install.packages("moments", repos='https://cran.rstudio.com/')
## 將程式套件安載入 'C:/Users/user/Documents/R/win-library/4.1'
## (因為 'lib' 沒有被指定)
## package 'moments' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\user\AppData\Local\Temp\RtmpiQ5d1K\downloaded_packages
library(moments)
## Warning: 套件 'moments' 是用 R 版本 4.1.1 來建造的

計算偏態

with(dta, skewness(功能))
## [1] 1.710658

一次計算所有變項的平均數

sapply(dta[, -c(1:3)], mean)
##     視力     聽力     移動     溝通     功能 
## 1.208199 1.301815 1.515315 1.077756 1.298296

Conditional means

aggregate(cbind(視力, 聽力, 移動, 溝通) ~ 教育, data = dta, mean)
##   教育     視力     聽力     移動     溝通
## 1 大學 1.141953 1.243047 1.262339 1.036481
## 2 小學 1.401402 1.294299 1.913178 1.172897
## 3 初中 1.355153 1.480061 1.890982 1.180982
## 4 高中 1.242660 1.423351 1.704096 1.103723
## 5 專科 1.190650 1.281249 1.496748 1.066782