R studio 頁面介紹
R studio主要分為四大區塊
1. 左上區為編輯區,若想新增編輯頁面可點選左上角的「+」選R Script(windows快捷鍵為ctrl + shift + N , Mac為 command + shift + N)。
2. 左下區為R的介面,在編輯區塊所執行的指令都會在左下角顯現,也可以在此執行指令。
3. 右上區像是倉庫一樣,儲存了匯入及創造出的資料,執行過的命令也會記錄下來。
4. 右下區則為XXX,可以查看繪製的圖也可以查詢不懂的指令。
通常給R 的指令分成兩種,一個 expression,或是一個 assignment。
# 加 ; 減 ; 乘 ; 除 (這些都是Expression)
1 + 3 ; 10 - 8 ; 3 * 2 ; 6 / 3
## [1] 4
## [1] 2
## [1] 6
## [1] 2
# 3的平方 ; 3的1/3次方 ; 根號2
3 ^ 2 ; 3 ^ (1/3) ; sqrt(2)
## [1] 9
## [1] 1.44225
## [1] 1.414214
exp(10) # e = 2.71828... ; 指e ^10
## [1] 22026.47
# 以e為底取log ; # log2代表以2為底
log(10) ; log2(10)
## [1] 2.302585
## [1] 3.321928
pi ; exp(1)
## [1] 3.141593
## [1] 2.718282
# 四捨五入 ; # 四捨五入到小數點第二位 ; # 無條件捨去 ; # 無條件進位 ; # 取絕對值
round(4.7) ; round(4.786, 2) ; floor(4.7) ; ceiling(4.7) ; abs(-4.7)
## [1] 5
## [1] 4.79
## [1] 4
## [1] 5
## [1] 4.7
x <- c( 1 , 2 , 3 , 4 ) # 也可以寫成 x <- 1:4 (這個就是assignment)
# 總和 # 平均數 # 中位數 # 變異數 # 樣本標準差
sum(x) ; mean(x) ; median(x) ; var(x) ; sd(x) ; summary(x)
## [1] 10
## [1] 2.5
## [1] 2.5
## [1] 1.666667
## [1] 1.290994
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 1.75 2.50 2.50 3.25 4.00
cumsum(x) # 累加
## [1] 1 3 6 10
cumprod(x) # 累乘(可以算階乘)
## [1] 1 2 6 24
class(c(7,8,9))
## [1] "numeric"
class(c("葉哥好師","嗨嗨"))
## [1] "character"
class(c(TRUE,FALSE))
## [1] "logical"
c(1,2,3)+c(1:3)
## [1] 2 4 6
2+c(1,2,3)
## [1] 3 4 5
c(1,2)+c(1,2,3,4)
## [1] 2 4 4 6
c(1,3)+c(1,2,3)
## Warning in c(1, 3) + c(1, 2, 3): 較長的物件長度並非較短物件長度的倍數
## [1] 2 5 4
x <- c(1,2,3) ; y <- c(3,6,9)
x+y ; x*y ; y/x
## [1] 4 8 12
## [1] 3 12 27
## [1] 3 3 3
## 1 ~ 12的打法可以打 :
## == 是用來判斷有沒有相等
1:12
## [1] 1 2 3 4 5 6 7 8 9 10 11 12
(x1 = matrix(1 : 12 ,ncol = 6) )
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 3 5 7 9 11
## [2,] 2 4 6 8 10 12
(x2 = matrix(1 : 12 ,ncol = 6, byrow = T) )
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 2 3 4 5 6
## [2,] 7 8 9 10 11 12
(y1 = matrix(1 : 4 ,nrow = 2) )
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
(y2 = matrix(1 : 4 ,nrow = 2, byrow = T) )
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
t(x1)
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6
## [4,] 7 8
## [5,] 9 10
## [6,] 11 12
solve(y1)
## [,1] [,2]
## [1,] -2 1.5
## [2,] 1 -0.5
x1
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 3 5 7 9 11
## [2,] 2 4 6 8 10 12
t(x1) %*% x1
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 5 11 17 23 29 35
## [2,] 11 25 39 53 67 81
## [3,] 17 39 61 83 105 127
## [4,] 23 53 83 113 143 173
## [5,] 29 67 105 143 181 219
## [6,] 35 81 127 173 219 265
x1 * x1 # t(x1) * x1 不能跑,因為兩個物件維度不一樣
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 9 25 49 81 121
## [2,] 4 16 36 64 100 144
data <- data.frame(x1=c(1,2,3), #若要換行則此逗號要擺這
x2=c('a','b','c'))
data ; class(data)
## x1 x2
## 1 1 a
## 2 2 b
## 3 3 c
## [1] "data.frame"
data <- data.frame(x1=c(1,2,3,4),
x2=c('a','b','c'))
## Error in data.frame(x1 = c(1, 2, 3, 4), x2 = c("a", "b", "c")) :
arguments imply differing number of rows: 4, 3
Pro_Filler = c('25%', '50%', '75%') ; Surface = c('S1', 'S2') ; Filler = c('F1', 'F2')
d1 = expand.grid(Pro_Filler, Surface, Filler, 2)
library(splitstackshape)
Data = expandRows(d1, "Var4")
row.names(Data) = NULL
names(Data) = c('Pro_Filler', 'Surface', 'Filler')
y = c(194,208,233,241,265,269,155,173,198,177,235,229,239,187,224,243,243,226,137,160,129,98,155,132)
Data$y = y
Data
## Pro_Filler Surface Filler y
## 1 25% S1 F1 194
## 2 25% S1 F1 208
## 3 50% S1 F1 233
## 4 50% S1 F1 241
## 5 75% S1 F1 265
## 6 75% S1 F1 269
## 7 25% S2 F1 155
## 8 25% S2 F1 173
## 9 50% S2 F1 198
## 10 50% S2 F1 177
## 11 75% S2 F1 235
## 12 75% S2 F1 229
## 13 25% S1 F2 239
## 14 25% S1 F2 187
## 15 50% S1 F2 224
## 16 50% S1 F2 243
## 17 75% S1 F2 243
## 18 75% S1 F2 226
## 19 25% S2 F2 137
## 20 25% S2 F2 160
## 21 50% S2 F2 129
## 22 50% S2 F2 98
## 23 75% S2 F2 155
## 24 75% S2 F2 132
a = aov(y~.^3 , Data)
summary(a)
## Df Sum Sq Mean Sq F value Pr(>F)
## Pro_Filler 2 5968 2984 11.102 0.001864 **
## Surface 1 26268 26268 97.742 4.05e-07 ***
## Filler 1 6801 6801 25.305 0.000294 ***
## Pro_Filler:Surface 2 1186 593 2.207 0.152724
## Pro_Filler:Filler 2 3529 1765 6.566 0.011852 *
## Surface:Filler 1 3953 3953 14.708 0.002374 **
## Pro_Filler:Surface:Filler 2 479 239 0.890 0.435959
## Residuals 12 3225 269
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
lst <- list(A=c(1:5),
B=c('a','b'))
lst
## $A
## [1] 1 2 3 4 5
##
## $B
## [1] "a" "b"
## Data.frame
data <- data.frame(Date=c('7/23','7/23'),
Come=c(T,F),
Time=c(3,6))
data
## Date Come Time
## 1 7/23 TRUE 3
## 2 7/23 FALSE 6
## 好,我要從data中取出日期的變數(欄位、向量、抽屜)
data$Date ; data[,1]
## [1] 7/23 7/23
## Levels: 7/23
## [1] 7/23 7/23
## Levels: 7/23
## 好,我要從data中取出是否會來的變數(欄位、向量、抽屜)
data$Come ; data[,2]
## [1] TRUE FALSE
## [1] TRUE FALSE
## 好,我要從data中取出 '6'
data[2,3]
## [1] 6
## List
data <- list(Date=c('7/23','7/24','7/25','7/26'),
Come=c(T,F),
Time=c(3,6))
data
## $Date
## [1] "7/23" "7/24" "7/25" "7/26"
##
## $Come
## [1] TRUE FALSE
##
## $Time
## [1] 3 6
## 好,我要從data中取出日期的變數(欄位、向量、抽屜)
## 只是今天衣櫃的每個抽屜長度可以不一樣
data$Date
## [1] "7/23" "7/24" "7/25" "7/26"
data[1] # 仍然是list格式
## $Date
## [1] "7/23" "7/24" "7/25" "7/26"
data[[1]]
## [1] "7/23" "7/24" "7/25" "7/26"
data[[1]][2]
## [1] "7/24"
## NA常常就像這樣任性的存在
x <- c(1,2,3,NA,5)
y <- c(1,2,NA,4,5)
## NA只要碰到加減乘除就會無效
x + y
## [1] 2 4 NA NA 10
mean(x)
## [1] NA
## 只要把缺憾移除掉人生就美好多了
mean(x,na.rm=T)
## [1] 2.75
## 通常NA有規則可以填補我們就會補起來
x[4] <- 4
## 但往往你需要更聰明的方式去補而不是這樣傻傻的數啊 !!
## is.na可以回傳變數哪一個位置為NA
is.na(y)
## [1] FALSE FALSE TRUE FALSE FALSE
y[ is.na(y) ] <- 3
my.money <- c(0,100,Inf) ; your.money <- c(-Inf,10,0)
my.money+your.money
## [1] -Inf 110 Inf
my.money/your.money ## 我也不知道為什麼 Inf/0會=Inf,可能要問問助教
## [1] 0 10 Inf
0/0 ; 1/0-1/0
## [1] NaN
## [1] NaN
head(iris) # 設定為看前六行
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 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
data = iris[1:6, 1:5]
data ; class(data)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 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
## [1] "data.frame"
names(data) #看現在欄位的名字
## [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
## [5] "Species"
names(data) = c('花萼長', '花萼寬', '花瓣長', '花瓣寬', '品種')
names(data)
## [1] "花萼長" "花萼寬" "花瓣長" "花瓣寬" "品種"
# 刪除第五欄
data[,-5]
## 花萼長 花萼寬 花瓣長 花瓣寬
## 1 5.1 3.5 1.4 0.2
## 2 4.9 3.0 1.4 0.2
## 3 4.7 3.2 1.3 0.2
## 4 4.6 3.1 1.5 0.2
## 5 5.0 3.6 1.4 0.2
## 6 5.4 3.9 1.7 0.4
new = c('a','b','c','d','e','f')
cbind(data, new) # 增加第六欄
## 花萼長 花萼寬 花瓣長 花瓣寬 品種 new
## 1 5.1 3.5 1.4 0.2 setosa a
## 2 4.9 3.0 1.4 0.2 setosa b
## 3 4.7 3.2 1.3 0.2 setosa c
## 4 4.6 3.1 1.5 0.2 setosa d
## 5 5.0 3.6 1.4 0.2 setosa e
## 6 5.4 3.9 1.7 0.4 setosa f
# 刪除第六列
data[-6,]
## 花萼長 花萼寬 花瓣長 花瓣寬 品種
## 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
new = c(5.2 , 3.1, 1.1, 0.3, 'setosa')
rbind(data, new) # 增加第七列
## 花萼長 花萼寬 花瓣長 花瓣寬 品種
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3 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 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 5.2 3.1 1.1 0.3 setosa
dim(data)
## [1] 6 5
str(data) # attributes(data)
## 'data.frame': 6 obs. of 5 variables:
## $ 花萼長: num 5.1 4.9 4.7 4.6 5 5.4
## $ 花萼寬: num 3.5 3 3.2 3.1 3.6 3.9
## $ 花瓣長: num 1.4 1.4 1.3 1.5 1.4 1.7
## $ 花瓣寬: num 0.2 0.2 0.2 0.2 0.2 0.4
## $ 品種 : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1
data$品種 = '某一種花'
data
## 花萼長 花萼寬 花瓣長 花瓣寬 品種
## 1 5.1 3.5 1.4 0.2 某一種花
## 2 4.9 3.0 1.4 0.2 某一種花
## 3 4.7 3.2 1.3 0.2 某一種花
## 4 4.6 3.1 1.5 0.2 某一種花
## 5 5.0 3.6 1.4 0.2 某一種花
## 6 5.4 3.9 1.7 0.4 某一種花
## 選擇 花萼長 >= 5 的資料(列)
(index = data$花萼長 >= 5)
## [1] TRUE FALSE FALSE FALSE TRUE TRUE
data[index,]
## 花萼長 花萼寬 花瓣長 花瓣寬 品種
## 1 5.1 3.5 1.4 0.2 某一種花
## 5 5.0 3.6 1.4 0.2 某一種花
## 6 5.4 3.9 1.7 0.4 某一種花
X ; Y
## [,1] [,2]
## [1,] 1 1
## [2,] 0 2
## [3,] 1 0
## [,1]
## [1,] 13
## [2,] -2
## [3,] 1