SW/R

R : 벡터(vector) 개념 및 예제

얇은생각 2019. 1. 29. 12:30
반응형

벡터

이번 포스팅에서는 벡터에 대해 알아보겠습니다. 우리가 분석하고자 하는 데이터는 어떤 모양일까요? 대부분 1차원 배열과 2차원 배열의 형태를 가지고 있습니다. 그 이상의 데이터는 복잡하겠죠?



벡터1

1차원 배열 데이터의 모양은 위와 같습니다. 아래와 같은 데이터는 위와 같은 모양을 가집니다.

- 1학년 학생들의 성적 자료

- 2학년 학생들의 키 자료

- 1학년 학생들의 선호하는 도형 자료



벡터2

2차원 배열 데이터는 위와 같습니다. 아래와 같은 내용의 데이터는 위와 같은 모양을 가집니다.

- 3학년 학생들의 전과목 성적 자료



벡터3

R에서 벡터는 1차원 데이터를 저장하기 위한 자료 구조를 뜻합니다. 수학에서 사용하는 벡터의 의미와 다루는 방법이 같습니다. 벡터는 따라서 동일한 자료형의 값이 여러 개 연속되어 있는 것입니다. 변수들의 집합과 유사하죠?



벡터 만들기

x <- c(1,2,3) # 숫자형 벡터
y <- c("a","b","c") # 문자형 벡터
Z <- c(TRUE,TRUE, FALSE, TRUE) # 논리형 벡터
x # x 에 저장된 값을 출력하라는 의미
y

벡터를 만들기 위해서는 c() 함수를 이용합니다. 하나의 벡터는 동일한 자료형의 값들을 포함해야 합니다. 만약 다르면 오류가 납니다. 



w <- c(1,2,3, "a","b","c")

벡터4

하나의 벡터에 문자, 숫자를 섞으면 어떻게 될까요? 모두 문자로 인식하고 벡터에는 문자형으로 담겨집니다.



x <- c(1,2,3)
z <- c("a","b","c")

벡터5

즉 데이터를 같은 유형으로 담습니다. 그러면 위 그림과 같이 담겨진다고 생각하면 됩니다.



연속적인 숫자로 벡터만들기

v1 <- 50:90

벡터5

위와 같은 문법으로 50부터 90까지의 숫자를 벡터에 대입할 수 있습니다.



v2 <- c(1,2,5, 50:90)

벡터6

연속된 숫자 뿐만 아니라 원하는 값을 넣고 연속된 숫자도 넣을 수 있습니다.



일정 간격의 숫자로 구성된 벡터 만들기 : seq()

v3 <- seq(1,101,3) # 시작,종료,간격

벡터7

seq() 함수를 활용해서 원하는 범위에 간격을 넣어 벡터에 담을 수 있습니다.



v4 <- seq(0.1,1.0,0.1) # 시작,종료,간격

벡터8

소수점도 위처럼 활용할 수 있습니다.



반복값에 의한 벡터 만들기 : rep()

v5 <- rep(1,times = 5) # 1 을 5번 반복

벡터9

또 같은 값을 반복해서 넣을 수 있습니다.



v6 <- rep(1:5,times = 3)

벡터10

또 같은 범위의 값을 여러번 반복할 수 있습니다.



v7 <- rep(c("a","b","c"),each = 3)

벡터11

또 넣는 값을 each를 활용해서 각각 반복해서 넣을 수 있습니다.



v8 <- rep(c("a","b","c"),times = 3)

벡터12

문자도 반복해서 넣을 수 있겠죠?



벡터 요소 값에 이름 부여

names() 함수를 활용해서 값마다 이름을 부여할 수 있습니다. 요소 값에 이름 붙여도 계산에 아무 영향을 미치지 않습니다. 단지 데이터 분석을 하면서 의미를 명확하게 전달하는 역할을 합니다. 아래의 예제처럼 말입니다.


score <- c(90,85,70) # 성적표 입력
names(score) <- c("John","Tom","Jane") # 성적표에 해당하는 사람 입력
score # 출력시 아래와 같음력

벡터13



데이터 벡터에서 값 추출하기

한개의 값 추출

d <- c(1,4,3,7,8)
d[2] # 벡터에서 두번째 값

벡터15

한개의 값은 위와 같이 출력할 수 있습니다. 중요한 점은 기본 프로그래밍 언어와 다르게 배열이 1부터 시작한다는 것을 유의하셔야 합니다. 만약 프로그래밍 언어를 하지 않으신 분이라면 크게 헷갈리지 않으실 것입니다.



구간의 값 추출

d <- c(1,4,3,7,8) # 벡터 값 입력
d[1:3] # 1부터 3까지 자료 출력
d[c(1,3,5)] # 1,3,5 자료 출력
d[seq(1,5,2)] # 홀수번째 자료 출력

벡터에 구간의 값을 추출하는 방법은 위와 같습니다. 여러 방식을 활용해서 원하는 데이터를 받아 올 수 있겠죠?



Neagative index

d <- c(1,4,3,7,8,9) # 벡터의 자료 입력
d[-2] # - 는 제외하는 의미를 가짐
d[-c(3:5)] # 세번째에서 다섯번째 값은 제외하고 데이터 출력

위의 예제를 활용하면 원하지 않는 값을 제외하고 모든 값을 출력할 수 있습니다. 위 방식 역시 자주 활용합니다.



이름으로 값 추출하기

GNP <- c(2090,2450,960) # GNP
names(GNP) <- c("Korea","Japan","Nepal") # 나라별 이름 입력
GNP[1] # 첫번째 자료 출력
GNP["Korea"] # korea 자료 출력
GNP[c("Korea","Nepal")] # korea, nepal 출력

벡터16

위에서 설명했다시피 백터 요소값마다 이름을 붙일 수 있었습니다. 따라서 그 이름을 활용하여 추출도 가능합니다. 위의 예제를 참고해주세요.

반응형