데이터 종류
● 숫자(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
'바이오 데이터 > R' 카테고리의 다른 글
[유전체 분석] R을 이용한 clustering (0) | 2021.03.19 |
---|---|
Differential Expression Gene(DEG) with R (2) | 2021.03.17 |
Bioconductor - 기본 자료구조(ExpressionSet, GenomicRange) (0) | 2021.03.15 |
댓글