R의 데이터 종류에는 스칼라, 벡터, 리스트, 행렬, 배열, 데이터 프레임이 있다. 이번 포스팅에는 스칼라, 벡터를 알아보자.
[스칼라(Scalar)]
스칼라는 단일 차원의 값을 뜻하며 길이가 1인 백터와 동일하다. 즉, 구성인자가 하나인 벡터를 말한다.
정수, 부동소수, 문자열("", '') , 논리값(TRUE,FALSE,T,F) , NA, NULL의 데이터타입을 가진다.
[NA(Not Available)]
NA는 결측치로 데이터가 없음을 뜻한다. is.na()를 통해 결측값의 존재를 파악한다.
[NULL]
NULL은 정해지지 않은 값을 표현할 때 사용되는 값이다. 값이 있어야하는데 빠져버린 NA와 달리 값이 아직 미정인 상태를 의미한다. is.null()을 통해 파악할 수 있다.
[Factor(요인)]
Factor는 범주형 데이터를 표현하기 위한 데이터 타입이다.
범주형 데이터란 데이터가 사전에 정해진 특정 유형으로만 분류되는 경우를 뜻한다.
요인은 명목형과 순서형으로 나뉜다. 명목형 데이터는 값들 간에 크기 비교가 불가능한 경우를 뜻하고 순서형 데이터는 순서를 둘 수 있는 경우를 뜻한다.
> answer <- factor("yes",c("yes","no"))
> answer
[1] yes
Levels: yes no
# 범주값을 벗어나는 값을 넣었을때
> answer <- factor("aaaa",c("yes","no"))
> answer
[1] <NA> # NA 출력
Levels: yes no
# 순서형
> order <- factor(1,c(1,2,3),ordered = TRUE, levels = c(3,2,1))
> order
[1] 3
Levels: 1 < 2 < 3
사전에 정해진 특정 유형의 수를 Level(레벨)이라고 한다.
[벡터]
벡터는 한가지 스칼라 데이터 타입의 데이터를 저장할 수 있다.
ex) 문자열만 저장하는 배열, 숫자만 저장하는 배열, 논리값만 저장하는 배열
만약 서로 다른 스칼라 데이터타입이 섞여있다면 자동 형변환을 한다.
expression > list > character > complex > double > integer > logical > raw > NULL
a <- c(1,2,3,5,7,2,4,-1)
b <- c("one","two","three")
c <- c(TRUE,FALSE,TRUE,T,F)
> c(1,2,3)
[1] 1 2 3
# 벡터는 중첩될 수 없어, 벡터안에 벡터를 넣으면 단일 차원의 벡터로 변경된다.
> c(1,2,3,c(1,2,3))
[1] 1 2 3 1 2 3
벡터는 중첩될 수 없어, 벡터안에 벡터를 넣으면 단일 차원의 벡터로 변경된다.
> age <- c(10,20,30)
> names(age) <- c("kim","Lee","Park")
> age
#kim Lee Park
# 10 20 30
> age["kim"] # 칼럼명으로 접근
#kim
# 10
> age[2] # 인덱스로 접근
#Lee
# 20
벡터의 각 셀에는 이름을 부여할 수 있다. 따라서 벡터에 저장된 요소들을 인덱스로 접근하는 것 외에도, 이름으로도 접근할 수 있다.
[벡터의 함수들]
length() : 벡터의 길이를 구할 수 있다.
> x <- c(1,2,3,4)
> length(x)
# [1] 4
unique() : 중복된 값을 제외
> x <- c(1,2,3,3,4,6,2,4,4)
> unique(x)
# [1] 1 2 3 4 6
그외
- NROW(x) : 벡터를 n행 1열의 행렬로 취급해 길이를 반환한다. 행의 수를 반환하는데 length()와 같다.
- is.numeric(x) : 숫자를 저장하는 벡터인지 확인, TRUE,FALSE 반환
- is.character(x) : 문자열을 저장하는 벡터인지 확인, TRUE,FALSE 반환
[벡터의 데이터 접근]
> x <- c(10,9,8,7,6,5,4,3,2,1)
> x[2] # x[n] : 벡터 x의 n번째 요소를 가지고 옴 (n은 숫자 or 원소의 이름인 문자열)
# [1] 9
> x[-3] #x[-n] : 벡터 x의 n번째 요소를 제외한 나머지를 가지고 옴 (n은 숫자 or 원소의 이름인 문자열)
# [1] 10 9 7 6 5 4 3 2 1
> x[c(1,2,5)] # x[index_vector] : 벡터 x로부터 index_vector에 지정된 원소를 가지고옴.(숫자 or 원소의 이름 벡터)
# [1] 10 9 6
> x[2:6] # x[start:end] : start부터 end까지 원소를 가지고옴. start와 end 를 포함
# [1] 9 8 7 6 5
- x[n] : 벡터 x의 n번째 요소를 가지고 옴 (n은 숫자 or 원소의 이름인 문자열)
- x[-n] : 벡터 x의 n번째 요소를 제외한 나머지를 가지고 옴 (n은 숫자 or 원소의 이름인 문자열)
- x[index_vector] : 벡터 x로부터 index_vector에 지정된 원소를 가지고옴.(숫자 or 원소의 이름 벡터)
- x[start:end] : start부터 end까지 원소를 가지고옴. start와 end 를 포함
[벡터의 연산]
> x <- c(1,2,3,4,5,6,7,8,9,10)
> x + 1 # 모든 원소에 1을 더한다
# [1] 2 3 4 5 6 7 8 9 10 11
> x %% 3 # 모든 원소의 3의 나머지를 구한다
# [1] 1 2 0 1 2 0 1 2 0 1
> x <- c(1,2,3,4,5,6,7,8,9,10)
> y <- c(10,9,8,7,6,5,4,3,2,1)
> x + y # 벡터와 벡터의 연산은 같은 위치의 원소끼리 연산
# [1] 11 11 11 11 11 11 11 11 11 11
벡터 x의 모든 요소에 n을 더한 벡터를 구한다. (+,-,/,%% 등도 적용가능)
> x <- c(1,2,3,4,5)
> y <- c(1,2,3,4,6)
> x == y
# [1] TRUE TRUE TRUE TRUE FALSE
> x != y
# [1] FALSE FALSE FALSE FALSE TRUE
== 과 != 를 사용하여 두 벡터의 원소가 같은지 확인 할 수 있다.
> x <- c(1,2,3,4,5)
> y <- c(1,2,3,4,5)
> identical(x,y)
#[1] TRUE
> x <- c(1,2,3,4,5)
> y <- c(1,2,3,4,6)
> identical(x,y)
#[1] FALSE
벡터 전체가 동일한지 판단하기 위해서는 identical()을 사용해야한다.
> 1 %in% c(1,2,3)
#[1] TRUE
value %in% x : 벡터 x에 value의 저장여부 (TRUE, FALSE)
> x <- c(1,2,3,4,5)
> y <- c(1,2,6,7,8)
> union(x,y) # 합집합
#[1] 1 2 3 4 5 6 7 8
> intersect(x,y) # 교집합
#[1] 1 2
> setdiff(x,y) # 차집합
#[1] 3 4 5
> setequal(x,y) # 동일 집합인지 판단
#[1] FALSE
- union(x,y) : 합집합
- intersect(x,y) : 교집합
- setdiff(x,y) : 차집합
- setequal(x,y) : 동일 집합인지 판단
setequal()은 벡터를 집합으로 보기때문에 순서가 달라고 동일한 집합으로 인식하지만 identical()은 순서가 다르면 다른 벡터로 인식한다.
[벡터의 연속, 반복]
> seq(1,10, by=2)
#[1] 1 3 5 7 9
> rep(1:3, times=3)
#[1] 1 2 3 1 2 3 1 2 3
> rep(1:3, each=3)
#[1] 1 1 1 2 2 2 3 3 3
- seq(시작값, 끝값, 증가치) : 증가치는 생략 가능
- rep(벡터, times = 반복횟수, each = 개별 반복횟수)
'데이터 분석 > R' 카테고리의 다른 글
[R] 파일 불러오기/ 내보내기 - read.table(), read.csv(), write.table(), write.csv(), write.xlsx() (0) | 2022.01.25 |
---|---|
[R] R 데이터 종류 #3 - 데이터프레임(Data Frame) (0) | 2022.01.21 |
[R] R 데이터 종류 #2 - 리스트, 행렬, 배열 (0) | 2022.01.21 |