해보記/R

<記> R Vector

Light Pillar 2019. 12. 2. 22:08

앞서 R에서 사용하는 데이터의 유형과 데이터 구조에 대해 간단하게 알아보았다.

2019/11/20 - [해보記/R] - <記> R 데이터 유형과 데이터 구조

벡터(Vector)에 대해서도 간단하게 알아보았다

2019/11/19 - [해보記/R] - <記> R 변수와 벡터

벡터를 비롯한 매트릭스, 배열, 데이터 프레임, 리스트 등에 대해서도 차차 더 알아보기로 하자.


벡터(Vector)

한 개 이상의 원소로 구성된 자료 구조로서 R의 '데이터 셋'(data set) 중에서 가장 기본이 되는 '데이터 셋'이다.

수치형 또는 문자형, 논리형 데이터를 원소(벡터의 원소는 한가지만 가능)로 하는 1차원의 배열 형태를 가진다.

 


c( ) 함수

하나의 벡터에는 다른 형태의 데이터가 원소로 구성될 수 없다. 수치형 벡터는 정수, 실수, 복소수 등 수치형 데이터만을, 문자형 벡터는 문자나 문자열 등의 문자형 데이터만을, 논리형 벡터는 참 또는 거짓의 논리형 데이터만을 원소로 갖는다.

만약, 벡터를 생성할 때 원소로 숫자와 문자, 논리 값 등으로 지정해 주었다면, 그 원소들은 모두 문자형 데이터로 인식되어 문자형 벡터가 생성된다.

> x <- c(1, 2, 3)    # 숫자형 벡터
> y <- c("a", "b", "c")    # 문자형 벡터
> z <- c(TRUE, TRUE, FALSE, TRUE)    # 논리형 벡터
> w <- c(1, "a", TRUE)   # 논리형 벡터
> is.character(w)   # 벡터가 논리형인지 확인

 

seq( ) 함수

일정 간격의 숫자가 원소로 구성된 벡터를 만드는 함수

> seq(1, by=0.05, along=1:5)     #seq(시작값, by=증가분, 조건 지정)
> seq(1, 7, by=2)
> seq(1, -1, by=-0.5)
> seq(1, 7, length=3)
> rev(seq(1:5))     #rev : 자료의 순서를 역순으로 만드는 함수

 

rep( ) 함수

어느 일정한 패턴에 의해 반복적인 값을 갖는 벡터를 만들어 주는 함수이다.

> rep(c(1, 2, 3), 3)     # rep(a, b)는 a를 b만큼 반복
> rep(1:3, 3)       #a:B는 a부터 b까지의 수
> rep(c(4, 2), times=2)
> rep(c(4, 2), times=c(2, 1))
> rep(c(4, 2), length=3)
> paste("no", 1:5)     #반복되는 문자에 첨자를 붙여줌

 

Vector의 활용

> height <- c(160, 140, 155)
> people <- c("Ned", "Jill", "Pat")
> names(height) <- people         # height 벡터의 원소에 people 벡터의 원소인 이름을 할당
> height["Ned"]
> names(height) <- NULL           # height 벡터의 원소에 할당된 이름을 삭제

> vec1 <- c(1, 2, 3, 4, 5)       # 1~5 까지 자료를 갖는 vec1 변수 생성
> vec1[2]         # 2번째 자료
> vec1[c(2, 3, 5)]          # vec1의 2, 3, 5의 값만 표현
> vec1[c(-2, -3)]           # vec1의 2, 3 번째 자료 값 삭제
> vec1[vec1 > 2]          # vec1에서 2 보다 큰 값만 표현 (벡터에서만 가능)
> vec1[2] <- 6             # vec1의 2번째 위치의 값이 6으로 대체됨
> replace(vec1, 3, 2)      # vec1의 3번째 자료를 2로 변경
> append(vec1, 8, 5)      # vec1의 5번째 자료 다음에 8을 삽입

> height <- 175                            # height 스칼라 생성
> heights <- c(160, 140, 155)           # heights 벡터 생성
> heights[c(2, 1, 2)]                        # heights의 2, 1, 2번째 원소 추출
> heights <- append(heights, height)               # heights와 height를 결합
> heights.1 <- append(heights, 180, after=2)      # heights의 2번째 다음에 180 추가
> heights <- replace(heights, 2, 142)                 # heights의 2번째 원소를 142로 변경
> heights.2 <- replace(heights, c(2, 4), c(140, 142))     # 2번째를 140으로, 4번쨰를 142로 변경
> numbers <- 1:5                 # 1~5의 값을 갖는 벡터 생성
> heights <- heights.2[2:4]          # heights.2에서 2~4 번째 값까지만 생성
> length(heights)              # 벡터의 길이 지정