2014년 5월 9일 금요일

[Using R] R Language Basic #1 - Sample Data

* 아래 샘플은 RStudio 에서 실행하여 테스트 하였음을 알려 드립니다.
* R & RStudio Install Information --> Reference Link Clicked



샘플 소스 사용시 기본 확인 내용
실행한 스크립트를 작성하는 곳은 " Script " 패널에서 작성하며 한줄 씩 실행은 Ctrl + Enter 여러 라인을 실행시는 시작과 끝을 Drag & Drap 후 Ctrl + Enter 로 실행 하면 된다.

변수로 만들어서 지정된 내용은 보통 "Workspace"안에 나타나며 나타는 결과(내용)은 이미지 형태로 저장도 가능 하다.


** 데이터 타입에 대한 설명 및 예제 #1
1. Vectors (백터)
2. Functions that create vectors(벡터 생성함수) 
3. Matrices and arrays (행렬과 배열)
4. Factors (요인)


1. Vectors (백터)

 브랜드 6개의 매출과 객수 자료를 가지고 객단가를 계산하고 그 값이 2 만원 보다 큰지 여부에 대한 판정 자료를 생성해 보자

> brand  <- c("토니로마스", "매드포갈릭", "모락", "시추안하우스", "포쿡", "식당돈", "비스트로서울")
> brand
[1] "토니로마스"   "매드포갈릭"   "모락"         "시추안하우스" "포쿡"         "식당돈"       "비스트로서울"
> b.amt <- c(60000,90000,50000,80000,30000,45000,140000)
> b.amt
[1]  60000  90000  50000  80000  30000  45000 140000
> b.cnt <- c(3,3,2,3,2,2,3)
> b.cnt
[1] 3 3 2 3 2 2 3
> b.ct <- b.amt/b.cnt
> b.ct
[1] 20000.00 30000.00 25000.00 26666.67 15000.00 22500.00 46666.67
> ct_over <-  b.ct > 20000
> ct_over
[1] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
> logical.vector <- c(F, T, T, T, F, T, T)
> logical.vector
[1] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE



 - 가장 일반적인 자료 생성 방법은 c() 함수를 사용하는 것이다. 문자인 경우는 "토니로마스" 처럼 따음표("")를 사용해야 한다.

 - R 에서는 brand 와 같은 Character Vector(문자백터), b.amt, b.cnt와 같은 Numerical Vector (숫자백터) 그리고 ct_over 와 같이 Logical Vector(논리벡터)가 있다.

 - 논리 백터값을 만들때는 F 또는 T 로 작성하여도 동일하다. 그러나 따음표("")를 사용할 경우 문자백터로 인식하므로 사용시 주의 해야 한다.


2. Functions that create vectors(벡터 생성함수) 

 일정 증가 또는 감소 값으로 숫자값을 c() 함수로 사용하는 경우는 보통은 없을 것이다. 기본으로 제공하는 생성합수를 활용하면 간단하게 할 수 있는 몇가지를 나열하고자 한다.

> seq(10, 30, 5)
[1] 10 15 20 25 30
> seq(10, 30)
 [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
> 10:30
 [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
> vec <- c(10, 30, 60)
> rep(vec, 3)
[1] 10 30 60 10 30 60 10 30 60
> rep(vec, 2:4)
[1] 10 10 30 30 30 60 60 60 60
> rep(vec, seq(2, 4))
[1] 10 10 30 30 30 60 60 60 60
> rep(vec, c(4, 2, 7))
 [1] 10 10 10 10 30 30 60 60 60 60 60 60 60

  - seq() 함수는 3개의 인자를 사용하는 경우 1번째 시작숫자에서 2번째 숫자까지 3번째 숫자 간격의 숫자들로 백터를 생성한다. 상위 예제에서는 10 를 시작으로 5 값을 증가하여 30까지 출력한 것이다.

 - seq() 함수의 3개 인자값 중 마지막 값이 없는 경우 기본값으로 1씩 증가 한다. 이와 같은 명령은 10:30 이나 c(10:30) 과 동일하다.

 - rep()는 함수는 1번째 인자를 2번째 인자만큼씩 반복해서 백ㅌ를 생성하는데 반복수인 2번째 인자 길이가 1번째 인자보다 길수는 없다.

 - rep(vec, c(4, 2, 7)) = rep(c(10, 30, 60), c(4, 2, 7)) 이것은 같은 결과 인데 역시 10은 4번 반복, 30은 2번 반복 60은 7번 반복 하여 생성한다는 의미 이다.


3. Matrices and arrays (행렬과 배열)

> vector.x <- 1:15
> vector.x
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
> dim(vector.x) <- c(3,5)
> vector.x
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    4    7   10   13
[2,]    2    5    8   11   14
[3,]    3    6    9   12   15

- dim()함수를 이용하면 n 차원의 행렬을 생성할 수 있다.


> matrix.y  <- matrix(1:15, nrow=3)
> matrix.y1  <- matrix(1:15, nrow=3, byrow=T)
> matrix.y
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    4    7   10   13
[2,]    2    5    8   11   14
[3,]    3    6    9   12   15
> matrix.y1
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15


- matrix() 함수를 활용하면 nrow(the number of row)를 지정하는 방식으로 행렬을 생성할 수 있다. 보통 생략된 byrow=F 값을 T로 변경한 경우 값을 우측방향으로 생성하게 된다.

> rownames(matrix.y) <- LETTERS[3:5]
> colnames(matrix.y) <- month.abb[1:5]
> matrix.y
  Jan Feb Mar Apr May
C   1   4   7  10  13
D   2   5   8  11  14
E   3   6   9  12  15

 - rownames, colnames 함수를 활용하여 이름을 지정할 수 있다. 이름을 지정할 때 c()를 활용하여 사용 할 수도 있다.

> matrix.y
  Jan Feb Mar Apr May
C   1   4   7  10  13
D   2   5   8  11  14
E   3   6   9  12  15

> t(matrix.y)
     C  D  E
Jan  1  2  3
Feb  4  5  6
Mar  7  8  9
Apr 10 11 12
May 13 14 15

- transposition 함수 t() 는 행과 열 index를 바꾹 때문에 위의 예와 같이 행과 열의 위치가 변경된다.

> cbind(MA=1:3, MB=4:6, MC=7:9)
     MA MB MC
[1,]  1  4  7
[2,]  2  5  8
[3,]  3  6  9
> rbind(MA=1:3, MB=4:6, MC=7:9)
   [,1] [,2] [,3]
MA    1    2    3
MB    4    5    6
MC    7    8    9

- columnwise 결합 함수 cbind()나 rowwise 결합함수 rbind()를 사용하면 같은 길이의 벡터를 열 또는 행 방향으로 합쳐 행렬을 만들 수 있다. 이 함수는 이후에 데이터프레임을 적용하거나 실제로 유용하게 사용하는 경우가 많으니 기억해두길 바란다.


> month.name[1:12]
 [1] "January"   "February"  "March"     "April"     "May"       "June"      "July"      "August"    "September" "October"
[11] "November"  "December"
> month.abb[1:12]
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
> LETTERS[1:26]
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
> letters[1:26]
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"

- 자료 생성을 위한 참고로 활용



4. Factors (요인)

일반적으로 분석하고자 하는 데이터 형태로 많이 보게될 형태이다. 우리가 흔히 접하게 되는 것들 남자, 여자, 또는 M(male), F(female), 남자=1, 여자=2 으로 구분하여 보게 되는 수준값을 자주 보게 되며 경우에 따라서 수준조합을 수치형태의 코드로 변경을 해야 하는 경우도 발생 한다. 아래의 예제들로 확인해보길 바란다.

> data = c(1,2,2,3,1,2,3,3,1,2,3,3,1)
> fdata = factor(data)
> fdata
 [1] 1 2 2 3 1 2 3 3 1 2 3 3 1
Levels: 1 2 3

 - factor() 라는 함수는 벡터를 Levels을 가지는 Factor로 변환한다.

> rdata = factor(data,labels=c("I","II","III"))
> rdata
 [1] I   II  II  III I   II  III III I   II  III III
[13] I
Levels: I II III

- levels() 함수는 요인의 수준 벡터를 가리키며, 수준값을 다른 문자로 변경 할 수 있다.


댓글 없음:

댓글 쓰기

언제 부터 였던가 생각해보니 아르바이트 겸 외부 컨설팅을 의뢰 받고 맥북 프로를 처음 써봤을 때 부터 였던 것 같다. 지금은 거의 대부분의 작업을 맥으로 작업을 하다 보니 윈도우에서만 실행되는 일부 프로그램들 때문과 회사 내부 ERP프로그램이 윈도우 ...