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