R강의: 제1강

1. 연산자의 종류

x = 3
y = 5
z = 10


# 덧셈
x + y
## [1] 8
# 뺄셈
x - y
## [1] -2
# 곱셈
x * y
## [1] 15
# 나눗셈
x / y
## [1] 0.6
# 나눗셈의 몫
z %/% 3
## [1] 3
# 나눗셈의 나머지
z %% 3
## [1] 1
# 제곱과 제곱근
z**2
## [1] 100
z**0.5
## [1] 3.162278
sqrt(z)
## [1] 3.162278

2. 논리연산자의 종류

# 논리연산자 (조건)
x < y
## [1] TRUE
x > y
## [1] FALSE
x >= 2
## [1] TRUE
x <= 2
## [1] FALSE
x == y
## [1] FALSE
x != y
## [1] TRUE
x > 3
## [1] FALSE
y > 3
## [1] TRUE
# 교집합 (&)
x > 3 & y > 3
## [1] FALSE
# 합집합 (|)
x > 3 | y > 3
## [1] TRUE

3. 자료의 생성 및 선택

3-1. 벡터의 생성 및 선택

# 벡터의 생성
1:6
## [1] 1 2 3 4 5 6
c(1,2,3,4,5,6)
## [1] 1 2 3 4 5 6
c(1,3,5,7,9,11,13,15)
## [1]  1  3  5  7  9 11 13 15
a = c(1,3,5,7,9,11,13,15)
a
## [1]  1  3  5  7  9 11 13 15
# 벡터의 합성
b = c(1,3,5,7,9, 1:10)
b
##  [1]  1  3  5  7  9  1  2  3  4  5  6  7  8  9 10
# Sequential 벡터의 생성
c = seq(1,3, by= 0.5)
c
## [1] 1.0 1.5 2.0 2.5 3.0
d = seq(1,3, by = 0.2)
d
##  [1] 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0
# rep를 이용한 벡터의 생성
e = rep(1:3, times=5)
e
##  [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
f = rep(1:3, each=5)
f
##  [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
a
## [1]  1  3  5  7  9 11 13 15
# 벡터의 선택 ([]는 위치를 표시)
a[3]
## [1] 5
a[2:4]
## [1] 3 5 7
a[c(1,3)]
## [1] 1 5
a[-3]
## [1]  1  3  7  9 11 13 15
a[a == 5]
## [1] 5
a[a != 5]
## [1]  1  3  7  9 11 13 15
a[c(1,3)] = 0
a
## [1]  0  3  0  7  9 11 13 15

3-2. 행렬의 생성 및 선택

# 행렬의 생성
x = matrix(1:12, 3, 4)
x
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
y = matrix(1:12, 3, 4, byrow=T)
y
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
# 모든 요소를 1, 0 혹은 NaN으로 채운 행렬
matrix(1, 3, 4)
##      [,1] [,2] [,3] [,4]
## [1,]    1    1    1    1
## [2,]    1    1    1    1
## [3,]    1    1    1    1
matrix(0, 3, 4)
##      [,1] [,2] [,3] [,4]
## [1,]    0    0    0    0
## [2,]    0    0    0    0
## [3,]    0    0    0    0
matrix(NaN, 3, 4)
##      [,1] [,2] [,3] [,4]
## [1,]  NaN  NaN  NaN  NaN
## [2,]  NaN  NaN  NaN  NaN
## [3,]  NaN  NaN  NaN  NaN
# 단위행렬
z = diag(5)
z
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    0    0    0    0
## [2,]    0    1    0    0    0
## [3,]    0    0    1    0    0
## [4,]    0    0    0    1    0
## [5,]    0    0    0    0    1
# Diagonal의 추출
diag(z)
## [1] 1 1 1 1 1
x[1:2,1:2]
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
x[2,3]
## [1] 8
x[1,]
## [1]  1  4  7 10
x[,1]
## [1] 1 2 3

3-3. 배열의 생성 및 선택

# 배열의 생성

X = array(1:24,c(3,4,2))
X
## , , 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24
# 배열의 선택

X[, , 1]
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
X[, , 2]
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24
X[2, 4, 2]
## [1] 23

3-4. 데이터프레임의 생성 및 선택

# 데이터프레임의 생성

df  = data.frame(x = 1:3,
                  y = c('kim', 'lee', 'park'),
                  z = c(TRUE, TRUE, FALSE))
df
##   x    y     z
## 1 1  kim  TRUE
## 2 2  lee  TRUE
## 3 3 park FALSE
# 첫번째 열(column)의 선택
df$x
## [1] 1 2 3
df[,1]
## [1] 1 2 3
df[[1]]
## [1] 1 2 3
# 첫번째 행(row)의 선택
df[1,]
##   x   y    z
## 1 1 kim TRUE
# 한 요소의 선택
df[3,3]
## [1] FALSE

3-5. list의 생성 및 선택

# list의 생성
result = list(a=a,b=b,c=c,x=x,y=y,z=z,df=df)
result
## $a
## [1]  0  3  0  7  9 11 13 15
## 
## $b
##  [1]  1  3  5  7  9  1  2  3  4  5  6  7  8  9 10
## 
## $c
## [1] 1.0 1.5 2.0 2.5 3.0
## 
## $x
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
## 
## $y
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
## 
## $z
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    0    0    0    0
## [2,]    0    1    0    0    0
## [3,]    0    0    1    0    0
## [4,]    0    0    0    1    0
## [5,]    0    0    0    0    1
## 
## $df
##   x    y     z
## 1 1  kim  TRUE
## 2 2  lee  TRUE
## 3 3 park FALSE
# list의 선택
result$df
##   x    y     z
## 1 1  kim  TRUE
## 2 2  lee  TRUE
## 3 3 park FALSE
result$df[3,3]
## [1] FALSE

3-6. 외부 파일의 입력

# 데이터프레임을 입력하기 위한 packages (openxlsx, readxl, data.table)
# Dataframe의 자료입력 
# install.packages("openxlsx")   # dataframe reading
# install.packages("readxl")     # tibble dataframe
# install.packages("data.table") # data.table dataframe

# 자료를 입력을 하기 위해서 library로 정의해 줌
library(openxlsx)
library(readxl)
library(data.table)

# Dataframe의 입력
df1 = read.xlsx("regress.xlsx")
df1
##      지역 성별 교직경력 대인관계 자아개념 근무평정 SES점수 근무만족도
## 1  대도시 남자   1~10년       34       78       88      88         88
## 2  대도시 남자   1~10년       23       98       78      56         98
## 3  대도시 남자   1~10년       34       78       98      78         88
## 4  대도시 남자  11~20년       23       88       77      78         89
## 5  대도시 남자  11~20년       34       88       89      67         89
## 6  대도시 여자  11~20년       45       87       89      78         78
## 7  대도시 여자   1~10년       34       89       98      77         78
## 8  대도시 여자   1~10년       34       67       67      56         67
## 9  대도시 여자  11~20년       45       56       78      77         78
## 10 대도시 여자 20년이상       34       78       67      65         89
## 11 대도시 여자 20년이상       78       67       56      64         88
## 12 중도시 남자   1~10년       65       34       67      65         67
## 13 중도시 남자   1~10년       56       45       78      34         45
## 14 중도시 남자  11~20년       67       34       89      45         43
## 15 중도시 남자  11~20년       78       45       78      67         45
## 16 중도시 남자 20년이상       76       56       67      57         56
## 17 중도시 여자   1~10년       78       45       78      45         45
## 18 중도시 여자   1~10년       89       34       67      56         67
## 19 중도시 여자  11~20년       78       45       78      56         56
## 20 중도시 여자  11~20년       67       34       67      45         56
## 21 소도시 남자   1~10년       56       23       98      34         45
## 22 소도시 남자   1~10년       34       34       56      45         45
## 23 소도시 남자  11~20년       23       56       67      56         56
## 24 소도시 남자  11~20년       34       45       78      45         45
## 25 소도시 남자 20년이상       23       34       89      34         56
## 26 소도시 여자   1~10년       34       45       78      45         45
## 27 소도시 여자  11~20년       45       34       67      34         34
## 28 소도시 여자  11~20년       34       23       56      45         45
## 29 소도시 여자 20년이상       45       34       67      56         56
## 30 소도시 여자 20년이상       56       56       78      66         65
# Dataframe (tibble)의 입력
df2 = read_excel("regress.xlsx")
df2
## # A tibble: 30 × 8
##    지역   성별  교직경력 대인관계 자아개념 근무평정 SES점수 근무만족도
##    <chr>  <chr> <chr>       <dbl>    <dbl>    <dbl>   <dbl>      <dbl>
##  1 대도시 남자  1~10년         34       78       88      88         88
##  2 대도시 남자  1~10년         23       98       78      56         98
##  3 대도시 남자  1~10년         34       78       98      78         88
##  4 대도시 남자  11~20년        23       88       77      78         89
##  5 대도시 남자  11~20년        34       88       89      67         89
##  6 대도시 여자  11~20년        45       87       89      78         78
##  7 대도시 여자  1~10년         34       89       98      77         78
##  8 대도시 여자  1~10년         34       67       67      56         67
##  9 대도시 여자  11~20년        45       56       78      77         78
## 10 대도시 여자  20년이상       34       78       67      65         89
## # … with 20 more rows
class(df1)
## [1] "data.frame"
class(df2)
## [1] "tbl_df"     "tbl"        "data.frame"
# 대용량 자료의 입력 (Dataframe)
df3 = read.csv("tempbig.csv")
head(df3,10)
##    x1 x2  y
## 1   1  5 45
## 2   1  6 29
## 3   1  6 85
## 4   1  4 35
## 5   1  2 21
## 6   1  1 33
## 7   1  1 29
## 8   1  5 91
## 9   1  3 54
## 10  1  4 81
# 대용량 자료의 입력 (data.table: Dataframe의 일종)
df4 = fread("tempbig.csv")
head(df4,10)
##     x1 x2  y
##  1:  1  5 45
##  2:  1  6 29
##  3:  1  6 85
##  4:  1  4 35
##  5:  1  2 21
##  6:  1  1 33
##  7:  1  1 29
##  8:  1  5 91
##  9:  1  3 54
## 10:  1  4 81
# 대용량 자료의 입력 시간의 비교
system.time(read.csv("tempbig.csv"))
##  사용자  시스템 elapsed 
##    7.80    0.19    7.98
system.time(fread("tempbig.csv"))
##  사용자  시스템 elapsed 
##    0.32    0.03    0.08