Chapter 1. R의 기초


<예제> 기본 연산

기본연산에 대한 R코드

x <- 3      # 숫자 대입

x

y <- pi

[1] 3

[1] 3.141593



<예제> 사칙 연산 1

사칙연산에 대한 R코드

a <- 1+2      # 사칙연산

a

b <- 5-1

b

c <- 5*4

c

d <- 8/2

d

[1] 3

[1] 4

[1] 20

[1] 4



<예제> 사칙 연산 2

서울의 한 초등학교 반에 있는 다섯 명의 학생들의 몸무게는 40, 50, 45, 35, 37kg이다. 이 학생들의 몸무게의 평균을 구해보자. 평균은 전체 학생들의 몸무게를 학생수로 나눈 값이다.

m <- (40+50+45+35+37)/5

m

[1] 41.4


<예제> 도움말 찾기

평균(mean)에 대한 도움말을 찾아 확인하라.

help(mean)          # help 명령어를 이용한 도움말

?mean              # ?를 이용한 도움말

mean                   package:base                    R Documentation


_A_r_i_t_h_m_e_t_i_c _M_e_a_n


_D_e_s_c_r_i_p_t_i_o_n:


     Generic function for the (trimmed) arithmetic mean.


_U_s_a_g_e:


     mean(x, ...)

     

     ## Default S3 method:

     mean(x, trim = 0, na.rm = FALSE, ...)

     

_A_r_g_u_m_e_n_t_s:


       x: An R object.  Currently there are methods for numeric/logical

          vectors and date, date-time and time interval objects, and

          for data frames all of whose columns have a method.  Complex

          vectors are allowed for ‘trim = 0’, only.


........................................................................................


_R_e_f_e_r_e_n_c_e_s:


     Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) _The New S

     Language_.  Wadsworth & Brooks/Cole.


_S_e_e _A_l_s_o:


     ‘weighted.mean’, ‘mean.POSIXct’, ‘colMeans’ for row and

     column means.


_E_x_a_m_p_l_e_s:


     x <- c(0:10, 50)

     xm <- mean(x)

     c(xm, mean(x, trim = 0.10))


<예제> 데이터의 입력과 출력 1

데이터 입력과 출력에 대한 R 코드

beer = c(3, 4, 1, 1, 3, 4, 3, 3, 1, 3, 2, 1, 2, 1, 2, 3, 2, 3, 1, 1, 1, 1, 4, 3, 1)

print(beer)

 

bcd <- c("Y","N","N","N","Y","N")      # 데이터 입력

print(bcd)                            # 데이터 출력

[1] 3 4 1 1 3 4 3 3 1 3 2 1 2 1 2 3 2 3 1 1 1 1 4 3 1

[1] "Y" "N" "N" "N" "Y" "N“



<예제> 데이터의 입력과 출력 2

Table을 이용한 데이터 정리

bcd <- c("Y","N","N","N","Y","N")

bcd

bcd=c("Y","N","N","N","Y","N")

table(bcd)                      # 테이블

[1] "Y" "N" "N" "N" "Y" "N"

bcd

N Y

4 2


 Chapter 2. R의 응용


<예제> 기본 연산

기본연산에 대한 R코드

a <- 1;b <- 3;c <- 4

d <- (a+b)*c;d

a2 <- sqrt(4);a2 

b2 <- 5^2;b2 

c2 <- abs(-5);c2

d2 <- exp(7);d2

e2 <- log(10);e2

log2(4)

[1] 16

[1] 2

[1] 25

[1] 5

[1] 1096.633

[1] 2.302585

[1] 2



<예제> 삼각함수와 쌍곡선함수

에 대하여 삼각함수와 쌍곡선함수를 구하여라.

a <- pi/3                      # a에  변수 입력

sin(a); cos(a); tan(a);            # 삼각함수

sinh(a); cosh(a); tanh(a);         # 쌍곡선함수

[1] 0.8660254

[1] 0.5

[1] 1.732051

[1] 1.249367

[1] 1.600287

[1] 0.7807144



<예제> 올림, 반올림, 내림

4.25에 대하여 올림, 반올림, 내림을 구하여라.

x <- 4.25

round(x)     # 반올림

floor(x)      # 내림

ceiling(x)    # 올림

[1] 4

[1] 4

[1] 5



<예제> 논리 연산

변수에 관한 논리 연산 코드

x <- 4

x == pi

x != pi

x < pi

x <= pi

x > pi

x >= pi

[1] FALSE

[1] TRUE

[1] FALSE

[1] FALSE

[1] TRUE

[1] TRUE


<예제> 벡터에 관한 논리 연산

벡터에 관한 논리 연산 코드

x <- c(3, pi, 4); x

y <- c(pi, pi, pi); y

x == y

x != y

x < y

x <= y

x > y

x >= y

x == pi

x != pi

[1] 3.000000 3.141593 4.000000

[1] 3.141593 3.141593 3.141593

[1] FALSE  TRUE FALSE

[1]  TRUE FALSE  TRUE

[1]  TRUE FALSE FALSE

[1]  TRUE  TRUE FALSE

[1] FALSE FALSE  TRUE

[1] FALSE  TRUE  TRUE

[1] FALSE  TRUE FALSE

[1]  TRUE FALSE  TRUE



<예제> 데이터 불러오기

HTML로부터 데이터 불러오기에 대한 R 코드

## 데이터 불러오기(HTML)

read.csv('http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data',header=FALSE)

    V1    V2   V3   V4   V5  V6   V7   V8   V9  V10       V11   V12  V13  V14

1    1 14.23 1.71 2.43 15.6 127 2.80 3.06 0.28 2.29  5.640000 1.040 3.92 1065

2    1 13.20 1.78 2.14 11.2 100 2.65 2.76 0.26 1.28  4.380000 1.050 3.40 1050

3    1 13.16 2.36 2.67 18.6 101 2.80 3.24 0.30 2.81  5.680000 1.030 3.17 1185

4    1 14.37 1.95 2.50 16.8 113 3.85 3.49 0.24 2.18  7.800000 0.860 3.45 1480

.......

176  3 13.27 4.28 2.26 20.0 120 1.59 0.69 0.43 1.35 10.200000 0.590 1.56  835

177  3 13.17 2.59 2.37 20.0 120 1.65 0.68 0.53 1.46  9.300000 0.600 1.62  840

178  3 14.13 4.10 2.74 24.5  96 2.05 0.76 0.56 1.35  9.200000 0.610 1.60  560



<예제> 새로운 함수 만들기

새로운 함수 만들기에 대한 R 코드

abc = c(1,2,3,3,2,1,0,2,4,5)

cv = function(x){sd(x)/mean(x)}     

# cv()라고 명명한 함수. 함수는 function(변수){관계식} 의 형식으로

cv(abc) 

[1] 0.649754



<예제> For 문 만들기

1부터 10까지 합을 구하여라.

x <- c(1:10)            # 1부터 10까지 데이터 생성

y <- 0

for(i in 1:length(x)){

 y <- y+x[i]

}

y

[1] 55



<예제> If 문 만들기

If 문에 대한 R 코드

x <- runif(1, 0, 10) 

y <- c("jjajangmyeon", "jjambbong")

if(x>=5){

lunch <- y[1]

x <- 0

} else {

lunch <- y[2]

x <- 1

}

print(list(lunch,x))

[[1]]

[1] "jjajangmyeon"

[[2]]

[1] 0



<예제> 수열 생성

수열생성에 대한 R 코드

0:10

15:5

seq(0, 1.5, 0.1)

rep(9,5)

rep(1:4,2)

[1]  0  1  2  3  4  5  6  7  8  9 10

[1] 15 14 13 12 11 10  9  8  7  6  5

[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5

[1] 9 9 9 9 9

[1] 1 2 3 4 1 2 3 4



 Chapter 3. 실험과 확률


<예제> 동전 던지기

여러분이 가지고 있는 동전 10개를 던져 보고 앞면의 수와 뒷면의 수를 기록해봅시다.

coin = sample(c("앞","뒤"), 10, replace = TRUE)

coin

table(coin)

[1] "앞" "앞" "앞" "앞" "뒤" "앞" "뒤" "앞" "뒤" "뒤"

coin

뒤 앞

4  6



<예제> 주사위 던지기

주사위 1개를 10번, 50번, 100번, 1,000번, 10,000번, 100,000번 던져서 각 면이 나오는 비율을 히스토그램으로 표시하시오.

RollDie=function(n){sample(1:6, n, replace=T)}

r10 = RollDie(10)

hist(r10, br=c(0,1,2,3,4,5,6), main='', freq=F, ylab='상대도수', ylim=c(0,  0.5))

r50 = RollDie(50)

hist(r50, br=c(0,1,2,3,4,5,6), main='', freq=F, ylab='상대도수', ylim=c(0, 0.5))

r100 = RollDie(100)

hist(r100, br=c(0,1,2,3,4,5,6), main='', freq=F, ylab='상대도수', ylim=c(0, 0.5))

r1000 = RollDie(1000)

hist(r1000, br=c(0,1,2,3,4,5,6), main='', freq=F, ylab='상대도수', ylim=c(0, 0.5))

r10000 = RollDie(10000)

hist(r10000, br=c(0,1,2,3,4,5,6), main='', freq=F, ylab='상대도수', ylim=c(0, 0.5))

r100000 = RollDie(100000)

hist(r100000, br=c(0,1,2,3,4,5,6), main='', freq=F, ylab='상대도수', ylim=c(0, 0.5))

dev.off()

그림입니다.  그림입니다.

그림입니다.  그림입니다.

그림입니다.  그림입니다.



<예제> 숫자를 임의로 선택

45개 숫자에서 6개 숫자를 뽑으시오.

# 45개에서 6개 숫자 뽑기

sample(1:45, 6)

[1] 13 36 12 34 21 14



<예제> 확률 1

로또 1등 당첨 확률을 구해보시오.

# 45개의 수에서 6개의 숫자가 나올 모든 종류의 수

choose(45,6)

# 1등 당첨될 확률

1/choose(45,6)

[1] 8145060

[1] 1.227738e-07



<예제> 확률 2

동전을 던져서 앞면이 나올 확률을 구하시오

library(sets)                      # 라이브러리 불러옴

S = set("앞면","뒷면")               # 표본공간

A = set("앞면")                      # 앞면

P_A = length(A)/length(S)         # 앞면이 나타날 확률

P_A

[1] 0.5


<예제> 확률 3

10개의 제품 중에 불량품이 3개 있다. 이 중에서 2개의 제품을 구입했을 때 아래의 항목에 맞는 확률은? 

(1) 구입제품 중 불량품이 한개도 없는 경우 

(2) 구입제품 중 불량품이 적어도 한개 있는 경우

# 10개 제품중 2개 제품을 뽑는 경우의 수

choose(10,2)

# 7개 정상 제품에서 2개 제품을 뽑고 2개 불량품에서 뽑지 않을 경우의 수

choose(7,2)* choose(2,0)

# 모두 불량품일 확률

choose(7,2)* choose(2,0)/ choose(10,2)

# 적어도 불량품이 1개 있을 확률

1-choose(7,2)* choose(2,0)/ choose(10,2)

[1] 45

[1] 21

[1] 0.4666667

[1] 0.5333333



 Chapter 4. 기술 통계량


<예제> 대푯값

성균관대학교 수학적 모델링 수업을 듣는 10명의 키는 165, 165, 165, 169,  169, 169, 175, 175, 175, 175cm 이다. 10명의 학생들의 키에 대한 대푯값을 각각 구하여라

data <- c(165, 165, 165, 169,  169, 169, 175, 175, 175, 175)

mean(data)                               # 평균

median(data)                            # 중앙값, 중위수

med <- function(x) {                     # 최빈값(함수로 작성)

   odd.even <- length(x)%%2

   if (odd.even == 0)

   (sort(x)[length(x)/2] + sort(x)[1 + length(x)/2])/2

   else sort(x)[ceiling(length(x)/2)]

   }

med(data)

[1] 170.2

[1] 169

[1] 169



<예제> 산포도

iris 4열의 자료에 대하여 범위, 분산, 표준편차를 구하여라.

# 최대값과 최소값

d.iris <- iris[,4]

 

min_value <- min(d.iris) ;min_value  # 최대값

max_value<- max(d.iris) ;max_value  # 최소값

 

R <- max_value - min_value;R  # 범위

 

Variance <- var(d.iris)          # 분산

Variance               

SD <- sd(d.iris)                 # 표준편차

SD

[1] 0.1

[1] 2.5

[1] 2.4

[1] 0.5810063

[1] 0.7622377



<예제> 왜도(skewness)

iris 2열의 자료에 대하여 왜도를 구하여라.

# 왜도 함수 정의

skew <- function(x){

  m3 <- sum((x-mean(x))^3)/length(x)

  s3 <- sqrt(var(x))^3

  m3/s3

}

value <- iris[,2]

skew_value <- skew(value)

skew_value

[1] 0.3126147



<예제> 첨도(kurtosis)

iris 2열의 자료에 대하여 첨도를 구하여라.

# 첨도 함수 정의

kurtosis <- function(x){

  m4 <- sum((x-mean(x))^4)/length(x)

  s4 <- var(x)^2

  m4/s4-3

}

value <- iris[,2]

Kurtosis_value <- kurtosis(value)

Kurtosis_value

[1] 0.1387047



 Chapter 5. 데이터의 시각화


<예제> 원그래프 1

성균관 반점에서 25명에 대해서 중식메뉴 4개중의 선호도를 조사하였고 그 결과는 다음과 같다(여기서 1∼4는 각각 "자장면", "우동", "짬뽕", "기타"). 원그래프를 그리시오. 


      3, 4, 1, 1, 3, 4, 3, 3, 1, 3, 2, 1, 2, 1, 2, 3, 2, 3, 1, 1, 1, 1, 4, 3, 1

# 원 그래프

prod = c(3, 4, 1, 1, 3, 4, 3, 3, 1, 3, 2, 1, 2, 1, 2, 3, 2, 3, 1, 1, 1, 1, 4, 3, 1)

 

prod.counts = table(prod)

names(prod.counts) = c("자장면","우동", "짬뽕","기타")

n <- length(prod)

prod.counts/n*100

 

pie(prod.counts,col=c("purple","green2","cyan","white"))

dev.off()

자장면   우동   짬뽕   기타

    40     16     32     12


null device

          1

그림입니다.

<예제> 원그래프 2

2013년 검색엔진 점유비율을 그려봅시다.

p1 = c(78.56, 15.0, 3.56, 2.88)

names(p1) = c("네이버","다음", "구글", "기타")

pie(p1, col=3:6)

dev.off()

null device

          1

그림입니다.


<예제> 막대그래프 1

어느 직장에서 25명에 대해서 중식식당 메뉴의 선호도를 조사하였고 그 결과는 다음과 같다(여기서 1∼4는 각각 "자장면", "우동", "짬뽕", "기타"). 막대그래프를 그리시오.


 3, 4, 1, 1, 3, 4, 3, 3, 1, 3, 2, 1, 2, 1, 2, 3, 2, 3, 1, 1, 1, 1, 4, 3   1 


prod = c(3, 4, 1, 1, 3, 4, 3, 3, 1, 3, 2, 1, 2, 1, 2, 3, 2, 3, 1, 1, 1, 1, 4, 3, 1)

prod.counts = table(prod)

names(prod.counts) = c("자장면","우동", "짬뽕","기타")

barplot(prod.counts, col=c("purple","green2","cyan","white"))

dev.off()

null device

          1

그림입니다.


<예제> 막대그래프 2

1960년, 2012년 한국, 미국, 일본, 케냐, 필리핀의 1인당 국민소득을 막대그래프로 표현하시오.

gdp_1 = read.table(header=TRUE, text="연도 한국 미국 일본 케냐 필리핀

 1960     79   2881   479  254  98

 2012  22708  51749 46720 2587 943

 ")

 

barplot(height=as.integer(gdp_1[1,2:6]), 

       names.arg=c("한국", "미국", "일본", "케냐", "필리핀"), col=rainbow(6),

       main="1960년 1인당 국민소득")

barplot(height=as.integer(gdp_1[2,2:6]), 

       names.arg=c("한국", "미국", "일본", "케냐", "필리핀"), col=rainbow(6),

       main="2012년 1인당 국민소득")

dev.off()

null device

          1

그림입니다.  그림입니다.


<예제> 상자그림 1

경제성장률 데이터를 요약하고 상자그림을 그리시오.

gdp_r = ts(c(10.4, 6.5, 14.8, 9.4, 7.3, 13.5, 11.8, 10.3, 8.4, -1.9,  7.4,  8.3,          12.2, 9.9, 7.5, 12.2, 12.3, 11.7, 6.8, 9.3, 9.7, 5.8, 6.3, 8.8, 8.9, 7.2,  5.8, -5.7, 10.7, 8.8, 4, 7.2, 2.8, 4.6, 4, 5.2, 5.1, 2.3, 0.3, 6.3, 3.7, 2), start=1971, frequency=1)

 

summary(gdp_r)

boxplot(gdp_r, horizontal=TRUE)

dev.off()

Min. 1st Qu.  Median    Mean 3rd Qu.    Max.

 -5.700   5.125   7.350   7.188   9.850  14.800


null device

          1

그림입니다.

<예제> 상자그림 2

붓꽃 데이터의 상자그림을 그리시오.

par(mfrow=c(2,2))                             # 1페이지에 2x2로 그래프 옵션

boxplot(iris[,1]~iris[,5],main="Sepal Length" ) # iris[,5]가 종을 나타내는 변수

boxplot(iris[,2]~iris[,5],main="Sepal Width" )

boxplot(iris[,3]~iris[,5],main="Petal Length" )

boxplot(iris[,4]~iris[,5],main="Petal Width" )

dev.off()

null device

          1

그림입니다.

<예제> 산점도 1

기온과 증기압과의 관련성을 보기 위해서 다음과 같이 데이터를 얻었다. 두변수간 어떤 관계가 있는지 산점도를 그리시오.

pressure     # pressure는 내장함수임

plot(pressure, xlab = "Temperature (deg C)",  ylab = "Pressure (mm of Hg)",

      main = "pressure data: Vapor Pressure of Mercury")

dev.off()

   temperature pressure

1            0   0.0002

2           20   0.0012

3           40   0.0060

4           60   0.0300

5           80   0.0900

6          100   0.2700

7          120   0.7500

8          140   1.8500

9          160   4.2000

10         180   8.8000

11         200  17.3000

12         220  32.1000

13         240  57.0000

14         260  96.0000

15         280 157.0000

16         300 247.0000

17         320 376.0000

18         340 558.0000

19         360 806.0000


null device

          1

그림입니다.


<예제> 산점도 2

붓꽃 데이터의 산점도를 그리시오.

data<- iris[,1:4]

plot(data)

dev.off()

null device

          1

그림입니다.


<예제> 줄기 잎 그림

iris 3열의 자료에 대하여 줄기-잎 그림을 그려라.

d.iris<- iris[,3]

stem(d.iris, scale=0.5)

The decimal point is at the |


  1 | 01223333333444444444444455555555555556666666777799

  2 |

  3 | 03355678999

  4 | 0000011122223344445555555566677777888899999

  5 | 00001111111122334455566666677788899

  6 | 00111346779