쭈쌤
쭈쌤 Hello World

[R] 자료구조(1)-백터

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[R] 자료구조(1)-백터≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

[R] 자료구조(1)-백터

여러 개의 스칼라 값들을 연속적으로 저장하는 데이터 형식으로 연속성 자료형이라고도 부릅니다. R에서의 연속성 자료형에는 백터, 요인, 리스트 등이 있으며 이 포스팅에서는 가장 많이 사용되는 벡터 자료형에 대해 소개합니다.

백터

  • 스칼라 값의 모음.
  • 일반 프로그래밍 언어에서 이야기하는 1차 배열의 개념.
  • c() 함수를 사용하여 포함하고자 하는 스칼라 값들을 콤마로 구분한다.
  • 여러 종류의 스칼라 값들을 구분 없이 지정할 수 있다.

1) 기본적인 백터 생성

백터는 한 줄로 구성된 사물함 같은 형태로서 c() 함수에 포함하고자 하는 값들을 나열하여 생성한다.

1
2
foo <- c("hello", "world", 1L, 3.14, TRUE, NA, NULL, Inf)
foo
▶ 출력결과
1
2
3
4
5
6
7
'hello'
'world'
'1'
'3.14'
'TRUE'
NA
'Inf'

2) 백터 인덱스

백터에 포함되는 각 원소는 1부터 시작되는 일련번호를 부여받는다 –> 인덱스

인덱스 번호를 사용하여 개별적인 원소 값을 출력하기

대괄호를 사용하여 인덱스 번호를 명시한다.

1
2
3
foo[1]
foo[3]
foo[5]
▶ 출력결과
1
2
3
'hello'
'1'
'TRUE'

인덱스가 2인 원소를 제외하고 모두 출력

1
foo[-2]
▶ 출력결과
1
2
3
4
5
6
'hello'
'1'
'3.14'
'TRUE'
NA
'Inf'

3) 백터의 타입

백터는 모든 원소값을 가장 표현 범위가 큰 자료형으로 통일하여 변환한다.

문자열이 포함된 백터

문자열보다 표현 범위가 더 큰 자료형은 없으므로 모든 데이터의 형식이 문자열로 변환된다.

1
2
3
4
typeof(foo)
typeof(foo[1])
typeof(foo[3])
typeof(foo[5])
▶ 출력결과
1
2
3
4
'character'
'character'
'character'
'character'

문자열을 제외한 데이터끼리의 형식 변환

정수, 실수, 논리값의 경우 실수가 가장 표현범위가 넓다.

  • 정수 –> 논리값 : 0은 FALSE, 0이 아닌 모든 수 TRUE
  • 논리값 –> 정수 : FALSE는 0, TRUE는 1
1
2
bar = c(1L, 2.3, TRUE)    # 정수와 실수가 섞여 있는 백터 생성
bar                       # 생성결과 확인
▶ 출력결과
1
2
3
1
2.3
1
1
2
3
typeof(bar)               # 대표타입 확인
typeof(bar[1])            # 각 원소의 타입 확인
typeof(bar[2])            # 각 원소의 타입 확인
▶ 출력결과
1
2
3
'double'
'double'
'double'

4) 백터의 중첩

백터 안에 다른 백터가 포함될 경우 단일 차원으로 변환된다.

1
2
3
foo <- c(1, 2, 3)
bar <- c(10, 20, foo)
bar
▶ 출력결과
1
2
3
4
5
10
20
1
2
3

5) 백터의 연산

길이(원소의 수)가 같은 백터끼리의 연산

길이가 동일한 백터끼리 사칙, 비교, 논리 연산을 수행 할 수 있으며, 위치가 동일한 원소들끼리 연산이 수행된다.

만약 두 백터간의 원소수가 다르다면 경고메시지가 출력된다.

1
2
3
v1 <- c(1, 2, 3)
v2 <- c(10, 20, 30)
v1 + v2
▶ 출력결과
1
2
3
11
22
33

6) 백터와 스칼라 값에 대한 연산

백터의 모든 원소에게 스칼라 값에 대한 연산이 적용된다.

사칙,논리,비교 연산 모두 가능

1
2
v3 <- c(11, 22, 33)
v3 + 10
▶ 출력결과
1
2
3
21
32
43

7) 백터의 슬라이싱

구간을 지정하여 값을 추출하는 형식으로 지정된 끝 위치까지 추출한다.

백터이름[시작위치:끝위치]

1
2
3
foo <- c( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 )
a <- foo[5:8]
a
▶ 출력결과
1
2
3
4
5
6
7
8

8) 백터와 관련된 함수

1
2
# 테스트용 백터
test <- c( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 )

백터의 길이(=원소의 수) 확인

1
2
x <- length(test)
x
▶ 출력결과
1
10

백터의 길이를 확인하는 두 번째 방법

1
2
y <- NROW(test)
y
▶ 출력결과
1
10

기술통계 기본 함수들

1
2
3
4
5
6
7
8
9
10
# 데이터 준비하기
sample <- c(1,2,3,4,5)

sum(sample)          # 합계 구하기
max(sample)          # 최대값 구하기
min(sample)          # 최소값 구하기
mean(sample)         # 평균값 구하기
median(sample)       # 중앙값 -> 평균이 신뢰도가 없을 경우 대체할 수 있는 값.
var(sample)          # 분산 -> 값들의 변화량이 퍼져있는 정도. 분산이 크면 값이 들쭉날쭉 하다는 의미.
sd(sample)           # 표준편차 -> 분산 자체가 너무 큰 수치이므로 분산의 제곱근을 구해 적당히 줄인값
▶ 출력결과
1
2
3
4
5
6
7
15
5
1
3
3
2.5
1.58113883008419

9) 정형화 된 백터를 생성하는 방법들

seq(a, b, c) 함수

a부터 1까지 원소가 c씩 증가하는 백터. c가 생략될 경우 1씩 증가한다.

1부터 5까지 1씩 증가하는 값을 원소로 갖는 백터 생성
1
2
c <- seq(1, 5)
c
▶ 출력결과
1
2
3
4
5
1
2
3
4
5
seq() 함수의 축약표현
1
2
d <- 1:5
d
▶ 출력결과
1
2
3
4
5
1
2
3
4
5
0부터 9까지 3씩 증가하는 값을 원소로 갖는 백터 만들기
1
2
e <- seq(0, 9, 3)
e
▶ 출력결과
1
2
3
4
0
3
6
9

seq_len(n) 함수

1부터 1씩 증가하는 값 n개를 원소로 갖는 백터

1
2
f <- seq_len(5)
f
▶ 출력결과
1
2
3
4
5
1
2
3
4
5

seq_along(vector)

1부터 주어진 vector의 길이까지 순차적으로 증가하는 값을 갖는 벡터

1
2
3
4
# 주어진 데이터가 c('hello','bigdata','world') 이므로 길이는 3
tmp <- c('hello','bigdata','world')
g <- seq_along(tmp)
g
▶ 출력결과
1
2
3
1
2
3

req(start:end, count)

start부터 end까지의 범위를 count 회 반복하여 원소들을 생성

1
2
h <- rep(1:3, 3)
h
▶ 출력결과
1
2
3
4
5
6
7
8
9
1
2
3
1
2
3
1
2
3

names(vector) <- c(...)

vector의 각 원소에 대해 대입된 백터의 원소로 이름표를 지정한다.

1
2
3
4
5
6
7
8
# 테스트를 위한 백터 지정
점수 <- c(72, 86, 82)

# `점수`백터의 각 원소에 이름을 지정
names(점수) <- c('철수', '형석', '미영')

# 이름표가 적용된 결과 확인
점수
▶ 출력결과
1
2
3
**철수**		72
**형석**		86
**미영**		82

이름표를 활용하여 특정 원소에 접근

1
점수['형석']
▶ 출력결과
1
형석: 86
Rating:

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[R] 자료구조(1)-백터≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

comments powered by Disqus