본문 바로가기
Data·AI/R 데이터분석

R. 변수와 데이터객체(구조) 유형 - 기본 데이터 구조

by hyun-am 2020. 8. 20.

 

변수와 데이터객체(구조) 유형

 

기본 데이터 구조

객체 유형 요소 차원 데이터 종류(동질성/이질성) 관련 코드(함수)
스칼라(scalar) 단수 1차원 숫자/문자/논리 유형 중의 한 가지 단수 데이터 x ←3
벡터(vector) 단수/복수 1차원 숫자/문자/논리 유형 중의 단일 유형으로만 구성 x ←c( )
행렬(matrix) 단수/복수 2차원 숫자/문자/논리 유형 중의 단일 유형으로만 구성 x←matrix()
배열(array) 단수/복수 3차원 숫자/문자/논리 유형 중의 단일 유형으로만 구성 x←array()

스칼라 데이터 생성

a <- 2020
a1 <- '한국'
a5 <- '재밌는 데이터 분석'
a_bool <- TRUE
a_na <- NA

 

벡터 데이터 생성

x <- c(1,2,3,4:10,-5:-2)
# [1,2,3,4,5,6,7,8,9,10,-5,-4,-3,-2] 이런식으로 저장됩니다.
y <- c('코','로','나','조','심')

 

c( )

를 이용해서 벡터 데이터를 쉽게 생성할 수 있습니다.

 

벡터의 인덱싱과 연산

x
# 1 2 3 4 5 6 7 8 9 10 -5 -4 -3 -2 가 출력됩니다.

x[1]
# 다른 프로그래밍 언어와는 다르게 처음항목이 0번 index가 아니라 1번 index입니다.
# 따라서 1이 출력됩니다.

x[c(2,4)]
# index가 2이상이고 4이하인 값들을 출력해줍니다.
# 2 3 4가 출력됩니다.
# 만약 앞자리 숫자가 크면 앞자리수 이하 뒷자리수 이상 값들을 출력해줍니다.

 

마이너스(-)를 이용한 차집합 개념

x[-1]
# index가 1인 값들을 제외하고 출력합니다.
# 2 3 4 5 6 7 8 9 10 -5 -4 -3 -2가 출력됩니다.

x[-(3:5)]
# index가 3,4,5인 값들을 제외하고 출력합니다.
# 1 2 6 7 8 9 10 -5 -4 -3 -2

 

행렬 생성과 인덱싱

먼저 일반적인 방법으로 matrix를 생성하겠습니다.

먼저 nrow를 이용한 생성코드입니다.

mx <- matrix(data = c(92, 87, 38, NA, 99, 80), 
             nrow = 2)
# nrow는 row를 몇개 만들지 정하는 코드입니다. 
# 출력값은 다음과 같습니다.
# 92 38 99
# 87 NA 80

다음은 ncol를 이용한 생성코드입니다.

mx <- matrix(data = c(92, 87, 38, NA, 99, 80), 
             ncol = 2)
# nrow는 row를 몇개 만들지 정하는 코드입니다. 
# 출력값은 다음과 같습니다.
# 92 NA 
# 87 99
# 38 80

 

다음은 벡터데이터 두개를 결합해서 matrix를 생성하겠습니다.

rbind를 이용하면 행을 기준으로 위아래로 데이터를 결합해 matrix를 생성해줍니다.

m1 <- c(10, -2, 5:7)
m2 <- c(2, 12:14, -5)

mxr <- rbind(m1, m2)
# 출력값은 다음과 같습니다.
# 10 -2 5 6 7
# 2 12 13 14 -5

 

다음은 cbind를 이용해 열을 기준으로 양옆으로 결합하겠습니다.

mxc <- cbind(m1,m2)
# 출력 값은 다음과 같습니다.
# 10 2
# -2 12
# 5 13
# 6 14
# 7 -5

 

이제 생성된 martrix에 col과 row에 name을 넣어주겠습니다.

x1 <- c(10,5,3,8:10)
# 10 5 3 8 9 10
x2 <- c(-2:0, 3,1,2)
# -2 -1 0 3 1 2
xr <- rbind(x1,x2)
xr
# [x1] 10 5 3 8 9 10
# [x2] -2 -1 0 3 1 2
rownames(xr)
# x1, x2
colnames(xr)
# NULL
rownames(mxr) <- c("맥북", "갤럭시북")
colnames(mxr) <- c("1월", "2월", "3월", "4월", "5월","6월")

rownames(xr)
# "맥북" "갤럭시북"
colnames(xr)
# "1월" "2월" "3월" "4월" "5월" "6월"

 

이제 인덱싱을 해보겠습니다.

xr['맥북',]
# 1월 2월 3월 4월 5월 6월
# 10  5  3  8  9  10

xr[c(1:2),]
#       1월 2월 3월 4월 5월 6월
# 맥북    10  5  3  8  9  10
# 갤럭시북  -2  -1 0  3  1  2

 

배열 생성 및 인덱싱

raw1 <- c(8, 10, 7, 16, NA, -1, 8, 4)
raw2 <- c(4, NA, 8, 7, -2, 17, -3, 10)
raw3 <- c(23, -9, NA, NA, 11, 9, 4, 12)

raw <- c(raw1, raw2, raw3)
raw; class(raw)

 

out <- array(data = c(raw1, raw2, raw3), 
             dim = c(4, 2, 3))

여기서 dim = c(4,2,3)은 row가 4개 col이 2개 layer를 3개 만들라는 용어 입니다.

다음은 이렇게 만든 배열에 이름을 지정해주겠습니다.

먼저 이런식으로 행렬과 레이어의 이름을 준비해주겠습니다.

mylayer <- c("US", "EU", "AP")
myrow <- c("1분기", "2분기", "3분기", "4분기")
mycol <- c("아이폰", "갤럭시")

다음이렇게 만든 이름들을 list로 바꿔준 후 dimnames( )를 이용해 이름을 지정해주겠습니다.

dimnames(out) <- list(myrow, mycol, mylayer)
out; class(out)


이 자료는 https://www.youtube.com/channel/UChPuesN49tcqQqYRQHrLCuw를 참조하여 작성하였습니다.

 

K-ICT 빅데이터센터

판교 K-ICT 빅데이터센터 공식 유튜브 채널입니다.

www.youtube.com

 

댓글