R and Data Analysis

data(anscombe)
View(anscombe)
plot(y1 ~ x1, data = anscombe)
fit <- lm(y1 ~ x1, data = anscombe)
plot(y1 ~ x1, data = anscombe)
abline(fit, col = 'red')

R Basic

3 + 8
## [1] 11
a <- 5 
a = 7

a <- 3
b = 5
c <- a + b

numer <- 17.8
class(numer)
## [1] "numeric"
char <- 'Hello World'
class(char)
## [1] "character"
logic <- TRUE
class(logic)
## [1] "logical"
card_length <- 3
#card_width <- '5 inches'
#card_length * card_width

card_width <- 5

card_length * card_width
## [1] 15

存活機率計算

(1 - 40 / 100) * 100
## [1] 60

Vector

name1 <- 'Brian'
name2 <- 'Toby'
name_vec <- c('Brian', 'Toby', 'Sherry')
height_vec <- c(180,169,173)

x <- c(1,2,3,4)
y <- c(2,3,4,5)
x + y
## [1] 3 5 7 9
x - y
## [1] -1 -1 -1 -1
x * y
## [1]  2  6 12 20
x / y
## [1] 0.5000000 0.6666667 0.7500000 0.8000000
x <- c(1,2,3,4,5,6,7,8,9,10,11)
x <- 1:20 
x
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
y <- seq(1,20)
y
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
?seq
## starting httpd help server ... done
seq(1,3.5, 0.5)
## [1] 1.0 1.5 2.0 2.5 3.0 3.5
seq(1,10, length = 2)
## [1]  1 10
seq(1,10, length = 3)
## [1]  1.0  5.5 10.0
x <- c(1,2,3,5,7)
sum(x)
## [1] 18
?sum

sum(seq(1,100))
## [1] 5050
height_vec <- c(180,   169,    173)
name_vec <- c('Brian', 'Toby' , 'Sherry')

names(height_vec) <- name_vec
height_vec
##  Brian   Toby Sherry 
##    180    169    173
height_vec
##  Brian   Toby Sherry 
##    180    169    173
height_vec > 175
##  Brian   Toby Sherry 
##   TRUE  FALSE  FALSE
height_vec < 175
##  Brian   Toby Sherry 
##  FALSE   TRUE   TRUE
height_vec >= 175
##  Brian   Toby Sherry 
##   TRUE  FALSE  FALSE
height_vec <= 175
##  Brian   Toby Sherry 
##  FALSE   TRUE   TRUE
height_vec == 180
##  Brian   Toby Sherry 
##   TRUE  FALSE  FALSE
height_vec != 180
##  Brian   Toby Sherry 
##  FALSE   TRUE   TRUE
height_vec[height_vec > 175]
## Brian 
##   180
names(height_vec[height_vec > 175])
## [1] "Brian"
height_vec > 170 & height_vec < 180
##  Brian   Toby Sherry 
##  FALSE  FALSE   TRUE
height_vec > 170 | height_vec < 180
##  Brian   Toby Sherry 
##   TRUE   TRUE   TRUE

使用向量計算BMI

name_vec <- c('Brian', 'Toby', 'Sherry')
height_vec <- c(180,169,173)
weight_vec <- c(73,87,43)

bmi <- weight_vec / (height_vec / 100) ^ 2
names(bmi) <- name_vec

bmi < 18.5 | bmi >=24
##  Brian   Toby Sherry 
##  FALSE   TRUE   TRUE
names(bmi[bmi < 18.5 | bmi >=24])
## [1] "Toby"   "Sherry"

Matrix

kevin <- c(85,73)
marry <- c(72,64)
jerry <- c(59,66)

mat <- matrix(c(kevin, marry, jerry), nrow = 3, byrow = TRUE)



1:9
## [1] 1 2 3 4 5 6 7 8 9
matrix(1:9, nrow = 3)
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
matrix(1:9, nrow = 3, byrow = TRUE)
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
kevin <- c(85,73)
marry <- c(72,64)
jerry <- c(59,66)

mat <- matrix(c(kevin, marry, jerry), nrow = 3, byrow = TRUE)

colnames(mat) <- c('first', 'second')
rownames(mat) <- c('kevin', 'marry', 'jerry')
mat
##       first second
## kevin    85     73
## marry    72     64
## jerry    59     66
mat2 <- matrix(c(kevin, marry, jerry), nrow = 3, byrow = TRUE, dimnames = list(c('kevin', 'marry', 'jerry'),c('first', 'second') ))
mat2
##       first second
## kevin    85     73
## marry    72     64
## jerry    59     66
dim(mat)
## [1] 3 2
nrow(mat)
## [1] 3
ncol(mat)
## [1] 2
height_vec 
## [1] 180 169 173
height_vec[1]
## [1] 180
height_vec[2]
## [1] 169
mat[1,]
##  first second 
##     85     73
mat[,1]
## kevin marry jerry 
##    85    72    59
mat[2:3,]
##       first second
## marry    72     64
## jerry    59     66
mat[2,1]
## [1] 72
mat2 <- rbind(mat, c(78,63))
mat2
##       first second
## kevin    85     73
## marry    72     64
## jerry    59     66
##          78     63
rownames(mat2)
## [1] "kevin" "marry" "jerry" ""
rownames(mat2)[4] <- 'Sam'
mat2
##       first second
## kevin    85     73
## marry    72     64
## jerry    59     66
## Sam      78     63
mat3 <- cbind(mat,c(82,77,70))
mat3
##       first second   
## kevin    85     73 82
## marry    72     64 77
## jerry    59     66 70
colnames(mat3)
## [1] "first"  "second" ""
colnames(mat3)[3] <- 'third'
mat3
##       first second third
## kevin    85     73    82
## marry    72     64    77
## jerry    59     66    70
m1 <- matrix(1:4, nrow = 2, byrow = TRUE)
m2 <- matrix(5:8, nrow = 2, byrow = TRUE)

m1 + m2
##      [,1] [,2]
## [1,]    6    8
## [2,]   10   12
m1 - m2
##      [,1] [,2]
## [1,]   -4   -4
## [2,]   -4   -4
m1 * m2
##      [,1] [,2]
## [1,]    5   12
## [2,]   21   32
m1 / m2
##           [,1]      [,2]
## [1,] 0.2000000 0.3333333
## [2,] 0.4285714 0.5000000
mat
##       first second
## kevin    85     73
## marry    72     64
## jerry    59     66
rowSums(mat)
## kevin marry jerry 
##   158   136   125
colSums(mat)
##  first second 
##    216    203
?colSums

m1 %*% m2 
##      [,1] [,2]
## [1,]   19   22
## [2,]   43   50
matrix(1:9, byrow = TRUE) %*% c(1:9)
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
##  [1,]    1    2    3    4    5    6    7    8    9
##  [2,]    2    4    6    8   10   12   14   16   18
##  [3,]    3    6    9   12   15   18   21   24   27
##  [4,]    4    8   12   16   20   24   28   32   36
##  [5,]    5   10   15   20   25   30   35   40   45
##  [6,]    6   12   18   24   30   36   42   48   54
##  [7,]    7   14   21   28   35   42   49   56   63
##  [8,]    8   16   24   32   40   48   56   64   72
##  [9,]    9   18   27   36   45   54   63   72   81