Programming Language/etc

[R.입문] R 자료구조 - 벡터(vector)

김크리 2021. 10. 5. 22:18

목차

Hello world

변수명 <- 변수 값 으로 해당 객체에 대해 값을 지정할 수 있다.

sen <- 'hello world!'

print(x=변수명) 으로 해당 객체를 터미널에 출력할 수 있다.

print(x=sen)

class(x=변수명) 으로 해당 객체에 등록된 값의 자료형과 자료구조를 출력한다.

class(x=sen)

length() 함수 안에 객체 이름를 넣고 실행하면 원소의 갯수를 반환한다.

length(x= sen)
print('hello world!')
1 + 1
a <- 2 * 2
print(a)

R script를 작성하여 한번에 실행 할 수 있다.

객체 생성 규칙

  1. 객체 명은 숫자로 시작하면 에러가 발생한다. 단, 백틱(`)으로 감싸주면 에러가 발생하지 않는다.
  2. 백틱 대신 따옴표('', "")를 사용하여 감싸주어도 객체 명을 숫자로 시작할 수 있다. 단, 함수 안에서 따옴표의 내용은 문자열로 인식된다.

자료구조

데이터를 담는 그릇
자료구조를 이해해야 원하는 코드를 자신의 데이터에 적용할 수 있다.

R의 자료 구조로는 벡터, 행렬, 배열, 데이터 프레임, 리스트가 있다.
자료구조의 원소 값으로 정수, 실수, 문자열 등을 가질 수 있다.

벡터

같은 자료형의 스칼라 원소를 갖는 1차원 자료구조이다.
스칼라는 원소가 1개인 벡터를 의미한다.

숫자1 숫자2 숫자3 숫자4 숫자5 ...

자료형

  • 실수형 : 허수를 포함하는 복소수가 아닌 숫자
  • 정수형 : 소수점이 없는 숫자, 숫자 뒤에 L을 붙여야 정수형으로 표현(123L)
  • 문자형 : 따옴표("", '')로 감싼 문자열
  • 논리형 : 따옴표가 없는 TRUE(T), FALSE(F) 만 있는 자료형
  • 범주형 : 4자기 자료형을 명목형으로 변환하면 범주가 된다.
  • NA : Not Avaliable
  • NULL : 정해진 값이 없어 길이가 0인 객체
  • NaN : Not a Number
  • Inf : 무한(infinite)특징
  • 원소의 자료형이 모두 같다.* 자료형이 다른 스칼라, 벡터를 추가하면 자동으로 자료형이 강제 변환한다.
    강제 변환의 경우 논리형, 범주형 -> 정수형 -> 실수형 -> 문자형 반향으로 일어난다.

벡터 생성

  • 문자형과 논리형 벡터 생성 : c()
print(x='1. 벡터 생성')
a <- c(1L,2L,3L)
print(x=a)
class(x=a)
a <- c(1,2,3)
print(x=a)
class(x=a)


print(x = 101:150)

a<-c()  
print(a)
  • 범주형 벡터 생성 : factor(), as.factor()
  • nat <- c('ko','jp','ch','usa','ko','usa','jp') print(x =nat) fct <- as.factor(x=nat) print(x = fct)

범주가 Level 로 생성된다. 이 범주에 대해 순서를 지정할 수 있다.

fct <- factor(x=nat, levels = c('ko','usa','ch','jp'))  
print(x=fct)  
as.integer(x=fct)
  • 원소를 연속되는 벡터 생성 : seq()
    seq(from = 처음 숫자, to = 마지막 숫자, by= 간격, length.out =반환되는 벡터의 길이)
    • from, to, by, length.out 는 생략할 수 있다.
    • by와 length.out 은 같이 쓰일 수 없다.(에러 발생)
seq(from =1, to =3, by = 1)  
1:3  
seq(from = 3, to = 1, by = -1)  
seq(from =1, to = 10, by= 2.5)  
seq(from =1, to= 10, length=19)  
seq(1,3,1)  
seq(3)  
seq(1,3,1,length.out=5)  
seq(1,3,length.out=5)
  • 원소가 반복되는 벡터 생성 : rep()
    req(x=반복할 스칼라 또는 벡터, times=x에 지정된 벡터 전체를 반복할 횟수, each = 각원소 반복 횟수, length.out = 길이)
rep(x=1, times=3)  
rep(x=1:3, times=3)  
rep(x=1:3, each=3)  
rep(x=1:3, length=10)  
rep(x=1:3, 3, each=2)  
rep(x=1:3, 3, each=2, length=10)

벡터 원소 선택

  • 인덱싱(indexing)을 통해 벡터 원소의 위치번호를 지정하여 일부를 선택한다.
    벡터 객체명[인덱스]를 통해 특정 원소를 선택할 수 있다.
print(x=letters)

# vector의 내장 문자형 벡터 letters 사용

# a~b 출력

# 인덱스로 특정 위치의 값 출력

letters\[1\]
  • 슬라이싱(slicing)은 콜론(:)을 이용하여 연속된 벡터의 원소를 선택한다.
s <- letters[1:5]  
print(x=s)
  • 팬시 인덱싱(fancy indexing)은 대괄호 안에 정수형 벡터를 지정하는 방식이다. 원소의 인덱스를 가리키는 값을 선택한다.
s <- letters[1:5]

s[c(1,2,5)]
  • 불리언 인덱싱(boolean indexing)은 대괄호 안에 논리형 벡터를 지정한다. true에 해당하는 원소를 선택한다.
s <- letters[1:5]


s[c(TRUE, FALSE, TRUE, FALSE, TRUE)]

벡터 원소 추가


s <- letters\[1:5\]  
s\[6\] <- 'f'  
print(x=s)

s\[10\] = 'j'  
print(x=s)

벡터 원소 삭제

값을 삭제할 때는 객체이름[-인덱스값]으로 할 수 있다. 원소를 완전 삭제하기 위해서 삭제한 객체를 원하는 벡터 객체에 재할당 해야한다.

s <- letters\[1:5\]

s\[-10\]  
print(x=s)

# 재할당

s<-s\[-10\]  
print(x=s)

벡터 원소 변경

  • 인덱싱
  • s <- letters[1:5] s[1] <- 'A' print(x = s) s[2] <- 'B' print(x = s)
  • 슬라이싱
  • s[1:2] <- c('가','나') print(x=s)
  • 범주형 벡터 원소 변경
levels(x=fct)  
levels(x = fct)[5] <- 'taipei'  
fct[8]<-'taipei'  
print(x=fct)

형변환

  • 정수 형변환 : as.integer()
  • as.integer(x=1.2) as.integer(x='1.2') as.integer(x=FALSE) #TRUE =1, FALSE = 0
  • 실수 형변환: as.numberic()
as.numeric(x=1L)  
as.numeric(x='1.2')  
as.numeric(x=TRUE)
  • 문자열 형변환 : as.character()
as.character(x=1L)  
as.character(x=1.2)  
as.character(x=TRUE)
  • 논리형 형변환 : as.logical()
    as.logical(x=0)  
    as.logical(x=1.2)  
    as.logical(x='1.2')
  • 범주형 형변환 : as.factor()
e <- as.factor(x = nat)  
print(x=e)  
class(x=e)  
as.integer(x=e)

강제변환

벡터는 같은 자료형의 원소를 가진다. 자료형이 다른 두 벡터를 합치면 공통 자료형으로 강제 변환된다.

c <- c('hello','world')  
d <- c(FALSE, TRUE)  
e <- as.factor(x=c)

f <- c(d,e)  
print(d,e)

print(x=f)  
class(x=f)

f <- c(f,3)  
print(x=f)  
class(x=f)

f<- c(f,'4')  
print(x=f)  
class(x=f)

산술연산자

두 숫자형 벡터 사이에 산술 연산자를 추가하여 덧셈,뺄셈, 곱셈, 나눗셈 등을 할 수 있다.

a+b 더하기
a-b 빼기
a*b 곱하기
a^b 거듭제곱
a/b 나누기
a%%b 나머지 반환
a%/%b 몫 반환

비교 연산자

a>b TRUE/FALSE  반환
a>=b
a<b
a<=b
a==b
a!=b

논리 연산자

& 논리곱 왼쪽과 오른 쪽 모두 TRUE  일 경우, TRUE 반환
| 논리합 둘중 하나라도 TRUE 일 경우, TRUE 반환
! 논리부정 TRUE는 FALSE, FALSE는 TRUE로 결과를 반전하여 반환

%in% 연산자

멤버연산자라고 부르는 %in% 연산자 이다.

왼쪽에 위치한 값이 오른쪽에 위치한 벡터의 원소에 포함되는지 여부를 확인할 때 유용하게 사용된다.

a <- 0:5 
x <- 0
x == a[1]
x == a[2]
x == a[1] | x == a[2] | x ==a[3]
# 간략하게 할 수 있다.
x %in% a

행렬과 배열

1차원 벡터를 행과 열이 있는 2차원 형태로 변환한 자료구조이다.
행렬은 모든 원소의 자료형이 동일해야 한다.
벡터를 행과 열이 있는 행렬로 변경할 수 있다.
배열은 행렬ㅇ을 몇 겹으로 쌓은 다차원 자료구조이다.

 

숫자1 숫자2 숫자3
숫자4 숫자5 숫자6
숫자7 숫자8 숫자9

데이터 프레임

행렬과 같은 2차원 자료구조
행렬과 다르게 서로 다른 열 벡터 원소를 가질 수 있다.

 

이름 나이 취미
문자 숫자 숫자 문자
...      

리스트

벡터, 행렬, 데이터프레임을 모두 원소로 갖을 수 있는 자료구조 이다.
함수(function), 표현식도 원소로 가질 수 있다.

참고

나성호의 R 데이터 분석 입문 도서
https://github.com/HelloDataScience/DAwR