#0301上課程式碼:
#資料(data)、值(valus)、變數(varible)、物件(object)
# R 是以物件導向為主的程式語言, 在R中每一樣 “東西”, 都可視為 “物件”(object),
##一、R語言資料集合:
#1.向量(vector)
#2.清單(list)
#3.矩陣(matrix)
#4.陣列(array)
#5.因子(factor)
#6.資料框(dataframe)
# 資料分析基本上是 :產生資料物件、命名、使用函式對物件運算操作
#建立向量資料====
id <- c("001", "002","003","004", "005")
name <- c("superman", "batman", "spiderman", "wolverine", "wonderwoman")
height <- c(190, 188, 178, 150, 183)
weight <- c(102, 95, 76, 88, 59)
gender <- c("Male", "Male","Male","Male","Female")
#二、R 的最基本物件是向量====
# 向量是由包含相同 “模式” 的元素 (element) 組成,
# 向量物件的基本元素的類型(basic mode) 主要分成
# 六大向量(vector)類型
# 1.數值向量(numeric):包含 "integer", 整數型向量 與 "double", 倍精確度型向量。
# 2.整數向量(integer)
# 3.文字向量(character)
# 4.邏輯值向量(logical)
# 5.日期向量(Date)
# 6.日期時間向量(POSIXct)
#用class()查詢資料類型====
class(name)
## [1] "character"
class(height)
## [1] "numeric"
class(gender)
## [1] "character"
class(id)
## [1] "character"
class(height)
## [1] "numeric"
q <- height > 170
q
## [1] TRUE TRUE TRUE FALSE TRUE
class(q)
## [1] "logical"
#str()查看資料結構====
#summary()查看變數統計量
str(name)
## chr [1:5] "superman" "batman" "spiderman" "wolverine" "wonderwoman"
str(height)
## num [1:5] 190 188 178 150 183
#用[ ]取出向量資料
name
## [1] "superman" "batman" "spiderman" "wolverine" "wonderwoman"
name[2]
## [1] "batman"
name[3:5]
## [1] "spiderman" "wolverine" "wonderwoman"
name[-1]
## [1] "batman" "spiderman" "wolverine" "wonderwoman"
name[-c(1,3,5)]
## [1] "batman" "wolverine"
height
## [1] 190 188 178 150 183
height[height > 170]
## [1] 190 188 178 183
#將向量資料組合為data frame(數據框)
heroes <- data.frame(id,gender, height, weight, name)
#顯示在console區
heroes
## id gender height weight name
## 1 001 Male 190 102 superman
## 2 002 Male 188 95 batman
## 3 003 Male 178 76 spiderman
## 4 004 Male 150 88 wolverine
## 5 005 Female 183 59 wonderwoman
#看資料結構
str(heroes)
## 'data.frame': 5 obs. of 5 variables:
## $ id : chr "001" "002" "003" "004" ...
## $ gender: chr "Male" "Male" "Male" "Male" ...
## $ height: num 190 188 178 150 183
## $ weight: num 102 95 76 88 59
## $ name : chr "superman" "batman" "spiderman" "wolverine" ...
#看摘要
summary(heroes)
## id gender height weight
## Length:5 Length:5 Min. :150.0 Min. : 59
## Class :character Class :character 1st Qu.:178.0 1st Qu.: 76
## Mode :character Mode :character Median :183.0 Median : 88
## Mean :177.8 Mean : 84
## 3rd Qu.:188.0 3rd Qu.: 95
## Max. :190.0 Max. :102
## name
## Length:5
## Class :character
## Mode :character
##
##
##
##存成.RData格式====
save(heroes, file = "heroes.RData")#請填入"heroes.RData"
#清空物件,然後再讀取一次.RData
load("heroes.RData")
###用[ ] 取出data frame中的資料, 其中[ 列, 欄]====
heroes[2, ]#取出第二列資料
## id gender height weight name
## 2 002 Male 188 95 batman
heroes[,2]#取出第二欄資料
## [1] "Male" "Male" "Male" "Male" "Female"
heroes[5, ]##取出第五列
## id gender height weight name
## 5 005 Female 183 59 wonderwoman
heroes[3,4]##取出第三列第四欄資料
## [1] 76
#用欄位名稱取出某欄的資料,有兩種方法:
heroes[["name"]]
## [1] "superman" "batman" "spiderman" "wolverine" "wonderwoman"
##或是
heroes$name
## [1] "superman" "batman" "spiderman" "wolverine" "wonderwoman"
heroes$height
## [1] 190 188 178 150 183
mean(heroes$height)
## [1] 177.8
heroes[1:3,]
## id gender height weight name
## 1 001 Male 190 102 superman
## 2 002 Male 188 95 batman
## 3 003 Male 178 76 spiderman
heroes[heroes$name=="spiderman",]#找出名字為"spiderman"的所有資料
## id gender height weight name
## 3 003 Male 178 76 spiderman
heroes[heroes$name!="spiderman",]#找出除了"spiderman"以外的所有資料
## id gender height weight name
## 1 001 Male 190 102 superman
## 2 002 Male 188 95 batman
## 4 004 Male 150 88 wolverine
## 5 005 Female 183 59 wonderwoman
heroes[heroes$height>180,]#找出身高大於180的所有資料
## id gender height weight name
## 1 001 Male 190 102 superman
## 2 002 Male 188 95 batman
## 5 005 Female 183 59 wonderwoman
heroes$height
## [1] 190 188 178 150 183
sort(heroes$height)#排序由小到大
## [1] 150 178 183 188 190
sort(heroes$height, decreasing = T)#排序由大到小
## [1] 190 188 183 178 150
#畫圖一
barplot(sort(heroes$height, decreasing = T))

#畫圖二
barplot(sort(heroes$height, decreasing = T),#要畫圖的向量資料
main = "Heroes", #大標題
sub = "by Peter Liu", #次標題
names.arg = c("superman", "batman", "spiderman", "wonderwoman", "wolverine"), #資料名稱
xlab = "name", #x軸標籤
ylab = "height", #y軸標籤
col = c(6:10))#使用內建第6至10號顏色, colors(查詢R內建顏色)

# 亞洲四小龍(Four Asian Tigers)====
# https://zh.wikipedia.org/wiki/%E4%BA%9A%E6%B4%B2%E5%9B%9B%E5%B0%8F%E9%BE%99
#建立資料
nation <- c("Singapore","Hong kong","Korea","Taiwan")
growth <- c(0.36,0.28,0.83,1.40)
#合併nation和growth為data frame
data <- data.frame(nation,growth)
#畫長條圖
barplot(sort(data$growth, decreasing = TRUE),
main = "Four Asian Tigers",#大標題
sub = "by Peter Liu", #次標題
names.arg = c("Singapore","Hong kong","Korea","Taiwan"), #資料名稱
xlab = "Nations",
ylab = "Nations Population Growth",
col = c(11:14))#第6至10號顏色, colors(查詢R內建顏色)

###資料組合與切割====
df <- iris
#檢視資料
#查看完整資料
#查看資料結構
str(df)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
#查看資料摘要
summary(df)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
#查看資料欄位名稱
names(df)
## [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
#查看第三欄,第1到10筆資料
df[1:10,3]
## [1] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5
#查看欄位名稱為(Species)的資料
df$Species
## [1] setosa setosa setosa setosa setosa setosa
## [7] setosa setosa setosa setosa setosa setosa
## [13] setosa setosa setosa setosa setosa setosa
## [19] setosa setosa setosa setosa setosa setosa
## [25] setosa setosa setosa setosa setosa setosa
## [31] setosa setosa setosa setosa setosa setosa
## [37] setosa setosa setosa setosa setosa setosa
## [43] setosa setosa setosa setosa setosa setosa
## [49] setosa setosa versicolor versicolor versicolor versicolor
## [55] versicolor versicolor versicolor versicolor versicolor versicolor
## [61] versicolor versicolor versicolor versicolor versicolor versicolor
## [67] versicolor versicolor versicolor versicolor versicolor versicolor
## [73] versicolor versicolor versicolor versicolor versicolor versicolor
## [79] versicolor versicolor versicolor versicolor versicolor versicolor
## [85] versicolor versicolor versicolor versicolor versicolor versicolor
## [91] versicolor versicolor versicolor versicolor versicolor versicolor
## [97] versicolor versicolor versicolor versicolor virginica virginica
## [103] virginica virginica virginica virginica virginica virginica
## [109] virginica virginica virginica virginica virginica virginica
## [115] virginica virginica virginica virginica virginica virginica
## [121] virginica virginica virginica virginica virginica virginica
## [127] virginica virginica virginica virginica virginica virginica
## [133] virginica virginica virginica virginica virginica virginica
## [139] virginica virginica virginica virginica virginica virginica
## [145] virginica virginica virginica virginica virginica virginica
## Levels: setosa versicolor virginica
#修改欄位名稱, 請填入"花萼長", "花萼寬", "花瓣長", "花瓣寬", "品種")
names(df) <-c("花萼長", "花萼寬", "花瓣長", "花瓣寬", "品種")
#找出"花萼長"大於等於7的所有資料
df[df$花萼長>7,]
## 花萼長 花萼寬 花瓣長 花瓣寬 品種
## 103 7.1 3.0 5.9 2.1 virginica
## 106 7.6 3.0 6.6 2.1 virginica
## 108 7.3 2.9 6.3 1.8 virginica
## 110 7.2 3.6 6.1 2.5 virginica
## 118 7.7 3.8 6.7 2.2 virginica
## 119 7.7 2.6 6.9 2.3 virginica
## 123 7.7 2.8 6.7 2.0 virginica
## 126 7.2 3.2 6.0 1.8 virginica
## 130 7.2 3.0 5.8 1.6 virginica
## 131 7.4 2.8 6.1 1.9 virginica
## 132 7.9 3.8 6.4 2.0 virginica
## 136 7.7 3.0 6.1 2.3 virginica
#計算"花萼長"大於等於7的資料有幾筆?
nrow(df[df$花萼長>7,])
## [1] 12
#查看「品種」欄位為setosa資料
df[df$品種=="setosa",]
## 花萼長 花萼寬 花瓣長 花瓣寬 品種
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5.0 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## 11 5.4 3.7 1.5 0.2 setosa
## 12 4.8 3.4 1.6 0.2 setosa
## 13 4.8 3.0 1.4 0.1 setosa
## 14 4.3 3.0 1.1 0.1 setosa
## 15 5.8 4.0 1.2 0.2 setosa
## 16 5.7 4.4 1.5 0.4 setosa
## 17 5.4 3.9 1.3 0.4 setosa
## 18 5.1 3.5 1.4 0.3 setosa
## 19 5.7 3.8 1.7 0.3 setosa
## 20 5.1 3.8 1.5 0.3 setosa
## 21 5.4 3.4 1.7 0.2 setosa
## 22 5.1 3.7 1.5 0.4 setosa
## 23 4.6 3.6 1.0 0.2 setosa
## 24 5.1 3.3 1.7 0.5 setosa
## 25 4.8 3.4 1.9 0.2 setosa
## 26 5.0 3.0 1.6 0.2 setosa
## 27 5.0 3.4 1.6 0.4 setosa
## 28 5.2 3.5 1.5 0.2 setosa
## 29 5.2 3.4 1.4 0.2 setosa
## 30 4.7 3.2 1.6 0.2 setosa
## 31 4.8 3.1 1.6 0.2 setosa
## 32 5.4 3.4 1.5 0.4 setosa
## 33 5.2 4.1 1.5 0.1 setosa
## 34 5.5 4.2 1.4 0.2 setosa
## 35 4.9 3.1 1.5 0.2 setosa
## 36 5.0 3.2 1.2 0.2 setosa
## 37 5.5 3.5 1.3 0.2 setosa
## 38 4.9 3.6 1.4 0.1 setosa
## 39 4.4 3.0 1.3 0.2 setosa
## 40 5.1 3.4 1.5 0.2 setosa
## 41 5.0 3.5 1.3 0.3 setosa
## 42 4.5 2.3 1.3 0.3 setosa
## 43 4.4 3.2 1.3 0.2 setosa
## 44 5.0 3.5 1.6 0.6 setosa
## 45 5.1 3.8 1.9 0.4 setosa
## 46 4.8 3.0 1.4 0.3 setosa
## 47 5.1 3.8 1.6 0.2 setosa
## 48 4.6 3.2 1.4 0.2 setosa
## 49 5.3 3.7 1.5 0.2 setosa
## 50 5.0 3.3 1.4 0.2 setosa
#將[品種]欄位中為setosa資料,另存成一個物件(df_setosa),
df_setosa <- df[df$品種=="setosa",]
#將物件(df_setosa)另存為.RData格式
save(df_setosa, file = "df_setosa.RData")
#測驗====
#讀取heroes_stats.RData
load("heroes_stats.RData")
#檢視資料
#查看完整資料
#查看資料結構
str(heroes_stats)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 296 obs. of 9 variables:
## $ 姓名: chr "3-D Man" "A-Bomb" "Abe Sapien" "Abin Sur" ...
## $ 陣營: Factor w/ 3 levels "bad","good","neutral": 2 2 2 2 2 2 2 2 2 2 ...
## $ 智力: num 50 38 88 50 63 10 75 63 63 63 ...
## $ 體力: num 31 100 14 90 10 8 28 80 10 13 ...
## $ 速度: num 43 17 35 53 12 13 38 23 17 46 ...
## $ 耐力: num 32 80 42 64 100 5 80 90 10 64 ...
## $ 力量: num 25 17 35 84 71 5 72 98 7 17 ...
## $ 戰鬥: num 52 64 85 65 64 20 95 32 55 42 ...
## $ 總和: num 233 316 299 406 320 61 388 386 162 245 ...
## - attr(*, "spec")=List of 3
## ..$ cols :List of 9
## .. ..$ Name : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ Alignment : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ Intelligence: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ Strength : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ Speed : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ Durability : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ Power : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ Combat : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ Total : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## ..$ default: list()
## .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
## ..$ delim : chr ","
## ..- attr(*, "class")= chr "col_spec"
## - attr(*, "problems")=<externalptr>
#查看資料摘要
summary(heroes_stats)
## 姓名 陣營 智力 體力
## Length:296 bad : 0 Min. : 6.00 Min. : 4.00
## Class :character good :296 1st Qu.: 50.00 1st Qu.: 10.00
## Mode :character neutral: 0 Median : 63.00 Median : 28.00
## Mean : 60.65 Mean : 38.36
## 3rd Qu.: 75.00 3rd Qu.: 67.75
## Max. :100.00 Max. :100.00
## 速度 耐力 力量 戰鬥
## Min. : 8.00 Min. : 5.00 Min. : 5.00 Min. : 6.00
## 1st Qu.: 23.00 1st Qu.: 28.00 1st Qu.: 32.75 1st Qu.: 42.00
## Median : 33.00 Median : 56.00 Median : 56.50 Median : 64.00
## Mean : 38.45 Mean : 56.86 Mean : 55.66 Mean : 60.61
## 3rd Qu.: 50.00 3rd Qu.: 84.25 3rd Qu.: 73.25 3rd Qu.: 80.00
## Max. :100.00 Max. :110.00 Max. :100.00 Max. :101.00
## 總和
## Min. : 61.0
## 1st Qu.:238.0
## Median :305.5
## Mean :310.6
## 3rd Qu.:374.0
## Max. :581.0
#查看資料欄位名稱
names(heroes_stats)
## [1] "姓名" "陣營" "智力" "體力" "速度" "耐力" "力量" "戰鬥" "總和"
#查看第一、二、九欄,第1到5筆資料
heroes_stats[1:5,c(1,2,9)]
## 姓名 陣營 總和
## 1 3-D Man good 233
## 2 A-Bomb good 316
## 3 Abe Sapien good 299
## 4 Abin Sur good 406
## 7 Adam Monroe good 320
#查看欄位名稱為Alignment的資料
heroes_stats$Alignment
## NULL
#找出"Power"大於95的所有資料
heroes_stats[heroes_stats$Power>95,]
## [1] 姓名 陣營 智力 體力 速度 耐力 力量 戰鬥 總和
## <0 rows> (or 0-length row.names)
#計算""Power"大於95的的資料有幾筆?
nrow(heroes_stats[heroes_stats$Power>95,])
## [1] 0
#修改欄位名稱為中文
names(heroes_stats) <-c("姓名", "陣營", "智力", "體力", "速度","耐力","力量","戰鬥","總和")
#查看欄位名稱為Alignment的資料
heroes_stats$陣營
## [1] good good good good good good good good good good good good good good good
## [16] good good good good good good good good good good good good good good good
## [31] good good good good good good good good good good good good good good good
## [46] good good good good good good good good good good good good good good good
## [61] good good good good good good good good good good good good good good good
## [76] good good good good good good good good good good good good good good good
## [91] good good good good good good good good good good good good good good good
## [106] good good good good good good good good good good good good good good good
## [121] good good good good good good good good good good good good good good good
## [136] good good good good good good good good good good good good good good good
## [151] good good good good good good good good good good good good good good good
## [166] good good good good good good good good good good good good good good good
## [181] good good good good good good good good good good good good good good good
## [196] good good good good good good good good good good good good good good good
## [211] good good good good good good good good good good good good good good good
## [226] good good good good good good good good good good good good good good good
## [241] good good good good good good good good good good good good good good good
## [256] good good good good good good good good good good good good good good good
## [271] good good good good good good good good good good good good good good good
## [286] good good good good good good good good good good good
## Levels: bad good neutral
#查看[Alignment]欄位中為good資料
heroes_stats <- heroes_stats[heroes_stats$陣營=="good",]
#將[Alignment]欄位中為good資料,另存成一個物件(heroes_good),
heroes_stats<- heroes_stats[heroes_stats$陣營=="good",]
#將物件(heroes_good)另存為.RData格式
save(heroes_stats, file = "heroes_stats.RData")
#[Name]欄位中有"man"的hero
#請選擇五個超級英雄,以長條圖呈現他們的綜合能力值(Total)
five_heros<-c(579,492,465,446,420)
barplot(five_heros,#要畫圖的向量資料
main = "five_Heroes", #大標題
names.arg = c("superman", "Iron Man", "X-Man", "Wonder Man", "Spider-Man"), #資料名稱
xlab = "name", #x軸標籤
ylab = "total", #y軸標籤
col = c(6:10))#使用內建第6至10號顏色, colors(查詢R內建顏色)
