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維度: 多少行、多少欄(變項)
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
#看看第一列第一欄對應資料
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$移動 + dta$溝通)/4;
head(dta$功能)
## [1] 1.1325 1.2575 1.0825 1.6675 1.5000 1.0000
#第二個則可以警告是否有遺漏值
tail(dta$功能 <- rowMeans(dta[, 4:7]))
## [1] 1.0000 1.1450 1.4425 1.2500 1.0000 1.0950
基本統計量/描述統計 Descriptive statistic
#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.165
## Mean :1.515 Mean :1.078 Mean :1.276
## 3rd Qu.:1.800 3rd Qu.:1.000 3rd Qu.:1.417
## Max. :4.000 Max. :4.000 Max. :4.000
標準差的計算
sd(dta$"功能")
## [1] 0.3302689
with(dta, sd("功能"))
## Warning in var(if (is.vector(x) || is.factor(x)) x else as.double(x), na.rm =
## na.rm): 強制變更過程中產生了 NA
## [1] NA
安裝與載入
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\Rtmp44RUKg\downloaded_packages
library(moments)
## Warning: 套件 'moments' 是用 R 版本 4.1.1 來建造的
計算偏態
with(dta, skewness(功能))
## [1] 1.821716
一次計算所有變項的平均數
sapply(dta[, -c(1:3)], mean)
## 視力 聽力 移動 溝通 功能
## 1.208199 1.301815 1.515315 1.077756 1.275772