본문 바로가기
바이오 데이터/R

[R] - 기초 연산 및 데이터 구조

by _avocado_ 2021. 3. 5.

데이터 종류

● 숫자(numeric) : 1, 2, 3

 

● 문자(charicter) : 'abc', '123', "가나다" (따옴표로 감싸면 문자로 인식한다.)

 

● 논리(logical) : TRUE, T, FALSE, F

데이터 종류 관련 함수

class(X) : X의 데이터 타입을 알려준다.

as.numeric(X) : X를 숫자형으로 변경한다. '123' -> 123으로, 숫자로 바꿀 수 없으면 에러 (TURE =1, FALSE=0)

as.charicter() : 문자열로 바꾸어 준다.

as.logical() : 논리형으로 바꾸어 준다. (숫자에서 0만 FALSE, 문자에서 빈 문자열만 '' FAlSE)

기초 연산

▶ 산술 연산

연산 기호
더하기 +
빼기 -
곱하기 *
나누기 /
%/%
나머지 %%
제곱 ^, **

▶ 논리 연산

연산 기호
같다 ==
다르다 !=
크다,크거나 같다 >,>=
작다, 작거나 같다 <,<=
또는(or) |
그리고(and) &

변수(variable)

▶ 데이터를 문자에 저장한 것 (ex. x <- 3 , x는 3의 값을 갖는다.)

변수 설정 방법

1. 변수명 <- 데이터
2. 변수명 = 데이터
3. 데이터 -> 변수명
 
1번을 가장 많이 사용한다. 3번은 거의 사용하지 않는다.

● 변수명 규칙

 

- 문자, 숫자, 특수문자(. dot, _ underscore)를 사용할 수 있다.

 

- 첫 글자는 문자와. dot만을 사용할 수 있다.

 

- 담고 있는 데이터를 의미하는 이름으로 한다.


데이터 구조

1. vector

 

- 1차원 배열, 같은 종류의 자료만 넣는다.

 

- c() 함수를 이용하여 만든다.

c(1,2,3) 숫자형 벡터

c('a','b','c') 숫자형 벡터

c(TRUE, FALSE, TRUE) 논리형 벡터

 

● 벡터 연산

 

- 산술 연산 : 모든 값에 연산이 적용된다.

 

ex) vec + 2 = 벡터 모든 값에 2가 더해진다

 

- 벡터끼리의 연산

 

1. 벡터 사이의 산술 연산 

 

    - 길이가 같은 벡터면 순서대로 연산된다.

    - 길이가 배수관계(3개, 6개) 라면 짧은 쪽이 반복되어 연산된다.

    - 길이가 배수관계가 아닌 상태라면 반복되어 결과를 반환하지만 에러를 발생한다.

 

2. 벡터의 내적, 외적

 

▶ 내적은 %*%기호로 계산할 수 있다. (vec1 %*% vec2)

 

▶ 외적 :  벡터에서 외적은 2가지가 존재한다. outer prodect, cross prduct 한글로는 둘 다 외적이지만 전혀 다른 개념이다.

 

outer product : 내적에 반대 개념

$$(a_{1},a_{2}) \otimes (b_{1},b_{2}) = \begin{pmatrix}
a_{1}b_{1} & a_{1}b_{2}\\ 
 a_{2}b_{1}&a_{2}b_{2} 
\end{pmatrix}$$

outer product는 %o% 기호로 계산할 수 있다.

 

cross product : 두 벡터에 수직인 벡터를 구한다. 벡터 곱이라고도 부른다.

$$(a_{1},a_{2},a_{3}) \times (b_{1},b_{2},b_{3}) = (a_{2}b_{3}-a_{3}b_{2},a_{3}b_{1}-a_{1}b_{3},a_{1}b_{2}-a_{2}b_{1})$$

cross product는 pracma 라이브러리의 cross 함수로 계산이 가능하다. (corss(a,b))


2. 행렬

 

- 2차원 배열, 같은 데이터 타입만 넣을 수 있다.

 

- matrix() 함수를 이용하여 만든다.

matrix(값벡터,nrow=행의 수,ncol=열의 수, byrow=FALSE) 값을 순서대로 입력, 열과 행의 수를 정한뒤 행부터 채울지를 정한다.

matrix(c(1,2,3,4,5,6),nrow=3)

    [,1][,2]
[1,]  1   4  
[2,]  2   5
[3,]  3   6

● 행렬 연산

 

- 산술 연산 : 벡터와 같다.

 

- 행렬끼리 산술연산 : 벡터와 같다

 

- 행렬곱 : %*%기호를 이용한다. (a%*%b)

 

- 전치 행렬 : t() 함수를 이용한다.

 

- 역행렬 : solve() 함수를 이용한다.


3. 데이터 프레임 Dateframe

 

- 2차원 구조, 각 열 별로 같은 데이터 타입을 갖는다.

 

- 각 행과 열에 이름을 지정할 수 있다. (ex. colnames(데이터 프레임) = c('col1','col2',···))

 

- date.frame(vec1, vec2,···) 함수로 생성

vec1 = (10,20,30)
vec2 = ('남','여','남')
vec3 = (TRUE,TRUE,FALSE)

date.frame(vec1, vec2, vec3)

    [vec1][vec2][vec3]
[1,]   10   '남'  TRUE
[2,]   20   '여'  TRUE
[3,]   30   '남' FALSE

 

● 데이터 추출

 

- 행, 열 번호 or 이름으로 추출하기

 

df [1,1] : 1행, 1열의 데이터를 추출한다.

df [2,] : 2행의 데이터를 추출한다.

df [,-3] : 3열을 제외하고 추출한다.

 

- 열을 가져오기

 

df$col1 : col1 열을 가져온다.

 

● 데이터 필터링

 

- 벡터, 행렬, dateframe에서 사용 가능

 

vec1 > 5 :

vec > 5 : 벡터에서 5보다 큰 값의 위치는 TRUE, 작거나 같은 값은 FALSE를 반환한다.

vec[vec1 >5] : 5보다 큰 값만 남은 벡터를 반환한다.

4. 리스트 list

 

- 1차원 구조, 모든 데이터 타입을 담는다.

 

- list() 함수로 생성한다.

 

- list(객체1, 객체2,···)

 

● 객체 추출

 

list[위치번호] : 해당 객체만 갖는 리스트로 반환한다.

 

list[[위치번호]] : 해당 객체를 반환한다.


5. factor

 

- 명목형 자료를 갖는 벡터를 숫자로 표현할 수 있는 형태

 

- factor() 함수로 만들 수 있다.

vec <- c('사과','배','오렌지','사과')

fac <- factor(vec)

as.numeric(fac)

[1] 1, 2, 3, 1

- levels 옵션 : 지정한 값들만 유용한 것으로 인정한다. (나머지는 NA로 반환한다.)

 

- ordered 옵션 : 명목형 자료의 서열이 있을 경우에 사용한다. levels 옵션에 입력된 순서로 오름차순으로 서열이 정해진다.(뒤가 큰 값)

vec <- c('그렇다','아니다','보통','매우 아니다','매우 그렇다')

fac <- factor(vec, levels = c('매우 아니다','아니다','보통','그렇다','매우 그렇다'),ordered=TRUE)

fac

[1] '그렇다','아니다','보통','매우 아니다','매우 그렇다'
levels '매우 아니다' < '아니다' < '보통' < '그렇다' < '매우 그렇다'

as.numeric(fac)

[1] 4, 2, 3, 1, 5

댓글