R:자료구조: 두 판 사이의 차이
잔글 (→데이터 통계) |
잔글 (→데이터 추가하기, 연산하기) |
||
(같은 사용자의 중간 판 6개는 보이지 않습니다) | |||
3번째 줄: | 3번째 줄: | ||
==개요== | ==개요== | ||
자료구조를 수용하기 위한 자료객체. | 자료구조를 수용하기 위한 자료객체. | ||
데이터객체라고도 한다. | |||
===종류=== | ===종류=== | ||
12번째 줄: | 14번째 줄: | ||
!유형 | !유형 | ||
!혼합가능여부 | !혼합가능여부 | ||
!객체 속성 | !설명 및 객체 속성 | ||
|- | |- | ||
|벡터 | |벡터 | ||
19번째 줄: | 21번째 줄: | ||
|수치, 문자, 복소수, 논리 | |수치, 문자, 복소수, 논리 | ||
|불가(하나의 유형만 사용) | |불가(하나의 유형만 사용) | ||
|mode(자료유형), length(길이), names(각 성분원소의 이름(인덱스)(벡터)) | |||
|mode(자료유형), length(길이), names(각 성분원소의 이름(인덱스)) | |||
|- | |- | ||
|요인 | |요인 | ||
27번째 줄: | 28번째 줄: | ||
|수치/문자 | |수치/문자 | ||
|불가 | |불가 | ||
| | |순서가 있는 벡터라고 보면 된다. | ||
orert=TRUE 정렬순서를 정할 수 있다. level=정렬기준(벡터) | |||
|- | |- | ||
|행렬 | |행렬 | ||
34번째 줄: | 37번째 줄: | ||
|수치, 문자, 복소수, 논리 | |수치, 문자, 복소수, 논리 | ||
|불가 | |불가 | ||
|mode, length(원소갯수), dim(행, 렬), | |벡터들의 집합이라 보면 된다. | ||
{| class="wikitable" | |||
|+ | |||
!속성 | |||
!설명 | |||
|- | |||
|nrow=숫자 | |||
|행갯수 | |||
|- | |||
|ncol=숫자 | |||
|열갯수 | |||
|- | |||
|byrow=불리언 | |||
|TRUE면 행부터 채운다는 의미. | |||
|} | |||
mode, length(원소갯수), dim(행, 렬), | |||
dimnames(행, 렬 인덱스) | |||
|- | |- | ||
|데이터프레임 | |데이터프레임 | ||
42번째 줄: | 60번째 줄: | ||
|수치, 문자, 복소수, 논리 | |수치, 문자, 복소수, 논리 | ||
|가능 | |가능 | ||
|mode, length(행갯수), dim, nrow, ncol | |엑셀과 가장 유사한 데이터구조. | ||
mode, length(행갯수), dim, nrow, ncol | |||
{| class="wikitable" | |||
!속성 | |||
!설명 | |||
|- | |||
| | |||
| | |||
|} | |||
|- | |||
|티블 | |||
|tibble | |||
| | |||
| | |||
| | |||
|기본 데이터형이 아닌, 패키지이다. | |||
데이터프레임을 현대적으로 재구성.(오래된 동작들 수정) | |||
거의 유사하나, 조금 더 보기 편한 형태이다. | |||
tidyverse 작업을 약간 쉽게 만들어준다. | |||
|- | |- | ||
|시계열 | |시계열 | ||
56번째 줄: | 93번째 줄: | ||
|수치, 문자, 복소수, 논리 | |수치, 문자, 복소수, 논리 | ||
|불가 | |불가 | ||
| | |행렬 안에 행렬이 있다고 보면 된다. | ||
{| class="wikitable" | |||
!속성 | |||
!설명 | |||
|- | |||
|dim=벡터 | |||
|벡터로 각 차원당 몇 개의 데이터를 담을지 전달. | |||
|} | |||
|- | |- | ||
|리스트 | |리스트 | ||
63번째 줄: | 107번째 줄: | ||
|수치, 문자, 복소수, 논리, 표현식, call 등 | |수치, 문자, 복소수, 논리, 표현식, call 등 | ||
|가능 | |가능 | ||
| | |위의 자료형들을 모두 묶을 수 있다. | ||
보통 데이터들을 묶어 추출할 때 많이 사용한다. | |||
list(자료구조, 자료구조2, 자료구조3, ...) 형태로 다 담아버린다. | |||
list("이름"=자료구조, "이름2"=자료구조2, ...) 형태로 이름을 지정할 수 있다. | |||
|} | |} | ||
자료구조 내에 자료형이 혼합불가한 경우, 상위 우선순위의 형태로 바뀐다.(문자>복소수>수치>논리) | |||
===각 속성에의 접근=== | |||
<code>속성명(자료구조)</code> 형태로 접근하거나, <code>자료구조.속성명</code> 형태로. | |||
==자료구조 만들기== | |||
모든 것을 다루기엔 가로길이가 짧네; 일단 벡터, 행렬, 데이터프레임만 보면 나머지는 금새 사용법을 익힐 수 있을 것이다. | |||
{| class="wikitable" | |||
|+ | |||
!이름 | |||
!벡터 | |||
!행렬 | |||
!데이터프레임 | |||
|- | |||
|설명 | |||
|Combine. 하나의 열을 의미한다. | |||
다른 2차원 이상의 데이터에서 인덱스범위를 지정하는 데 쓰이기도 한다. | |||
벡터를 결합하여 행렬이나 데이터프레임을 만들기도 한다. | |||
|Matrix. | |||
|dataframe. | |||
|- | |||
|생성 | |||
|c(데이터) | |||
|matrix( | |||
data=데이터, | |||
nrow=행수 | |||
ncol=열수 | |||
byrow=기준) | |||
byrow가 T라면 행기준, R이면 열기준 | |||
|data.frame( | |||
변수명(열이름)=벡터1, | |||
변수명(열이름)=벡터2, | |||
) | |||
필요한 벡터만큼 넣는다. | |||
혹은 그냥 벡터의 변수명들만 나열한다. | |||
|- | |||
|자료형 변환 | |||
|as.vector(객체) | |||
|as.matrix(객체) | |||
|as.data.frame(객체) | |||
|}<br /> | |||
==연산특성== | |||
#자료형에 연산을 수행하면 각 원소별로 해당 연산을 수행한다. | #자료형에 연산을 수행하면 각 원소별로 해당 연산을 수행한다. | ||
125번째 줄: | 224번째 줄: | ||
x*c(1,10,100) | x*c(1,10,100) | ||
|배수관계에 있지 않으면 에러 | |배수관계에 있지 않으면 에러 | ||
|} | |}<br /> | ||
==데이터 접근== | |||
기본적으로 선택은 대괄호를 이용한다. <code>데이터셋[행, 열]</code> 의 인덱스를 사용하거나 벡터를 사용하거나. 일반 언어에서 처음 인덱스가 0인 것과 달리, R은 1부터 시작한다. | |||
= | 일반적으로 인덱스나 $기호, 부분집합(subset)을 활용하여 접근한다. | ||
{| class="wikitable" | |||
!의도 | |||
!1차원 | |||
!2차원 | |||
!3차원 이상 | |||
|- | |||
|데이터 접근 | |||
| | |||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ | ||
! | !의도 | ||
! | !방법(예시) | ||
! | |- | ||
! | |데이터1개 접근 | ||
|벡터명[1] | |||
|- | |||
|여러 개 접근 | |||
|벡터명[c(1,3,5,9)] | |||
|- | |||
|범위 접근 | |||
|벡터명[2:5] | |||
|- | |||
|제외하고 접근 | |||
|벡터명[-3] | |||
|} | |||
| | |||
{| class="wikitable" | |||
!의도 | |||
!방법(예시) | |||
|- | |||
|데이터1개 접근 | |||
|구조명[2,3] | |||
|- | |||
|여러 개 접근 | |||
|구조명[c(1,2,3), ] | |||
|- | |||
|범위 접근 | |||
|구조명[2:3, ] | |||
|- | |||
|1행 전부 | |||
|구조명[1, ] | |||
|- | |||
| rowspan="2" |1열 전부 | |||
|구조명[ ,1] | |||
|- | |||
|구조명$열이름<ref>실제 데이터는 굉장히 많은 열을 사용하기에, 숫자로만 다루기엔 어려움이 있다. 열의 순서가 바꾸는 경우도 있고.</ref> | |||
|- | |- | ||
| | |제외하고 접근 | ||
| | |구조명[ ,-1] | ||
구조명[-(1:3), -2] | |||
|} | |||
여러 방법을 조합해 | |||
<code>구조명[2:3, -2]</code> 등의 형태로 사용 가능. | |||
숫자:숫자 형태는 그 사이의 벡터를 만들어내는 명령이다. | |||
|리스트의 [3]에 접근하면 자료구조 통째로 가져오고,(묶인 덩어리) | |||
리스트의 <nowiki>[[3]]</nowiki>에 접근하면 실제내용에 접근하게 된다. | |||
리스트에서 인덱스를 사용하려면 대괄호를 2개씩 써줘야 한다. | |||
리스트명$열이름$다음차원열이름$.... 형식으로 접근할 수도 있다. | |||
리스트에 이름이 지정된 경우, <code>리스트$이름</code> 형태로 접근할 수 있다. | |||
리스트$이름$행이름 | |||
리스트<nowiki>[[1]]</nowiki>[3,4] 형태로 자료구조 안의 원소에 접근할 수 있다. | |||
|- | |||
|조건에 따른 접근 | |||
| | |||
|특정 조건을 가진 행만을 포함하기 위해. | |||
구조명[구조명$열이름1 == "해당조건" & 구조명$열이름2 논리식, | |||
열번호] | |||
해당 조건을 가진 행만 뽑아낸다. | |||
| | |||
|} | |||
===데이터 위치 찾기=== | |||
<code>자료구조명=="찾을자료"</code> 를 입력하면 해당 위치에만 TRUE를 반환하는 자료구조를 반환한다. | |||
이를 이용하여 <code>자료구조[자료구조==찾을자료]</code> 를 입력하면 해당 자료에 접근할 수 있다.<br /> | |||
==자료구조 관련 함수== | ==자료구조 관련 함수== | ||
285번째 줄: | 424번째 줄: | ||
순서는 신경쓰지 않는다. | 순서는 신경쓰지 않는다. | ||
|setequal(x,y) | |setequal(x,y) | ||
|} | |} | ||
<br /> | |||
==벡터 관련 함수== | ==벡터 관련 함수== | ||
489번째 줄: | 555번째 줄: | ||
데이터셋[, "열이름"] = 연산식 | 데이터셋[, "열이름"] = 연산식 | ||
|- | |||
|append() | |||
| | |||
|일반적으로 붙일 자료의 자료구조로 변환해 사용한다. | |||
|붙일대상<-append(붙일대상, 붙일 것) | |||
list_output <- append(list_output, list(iris[i,])) | |||
|} | |} | ||
===데이터 처리=== | ===데이터 처리=== |
2020년 9월 24일 (목) 21:18 기준 최신판
R언어 공부를 위한 틀 틀:R
개요[편집 | 원본 편집]
자료구조를 수용하기 위한 자료객체.
데이터객체라고도 한다.
종류[편집 | 원본 편집]
데이터형과 별개로 있는 자료형이다.
객체 | 코드명 | 차원 | 유형 | 혼합가능여부 | 설명 및 객체 속성 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
벡터 | vector | 1 | 수치, 문자, 복소수, 논리 | 불가(하나의 유형만 사용) | mode(자료유형), length(길이), names(각 성분원소의 이름(인덱스)(벡터)) | ||||||||
요인 | factor | 1 | 수치/문자 | 불가 | 순서가 있는 벡터라고 보면 된다.
orert=TRUE 정렬순서를 정할 수 있다. level=정렬기준(벡터) | ||||||||
행렬 | matrix | 2 | 수치, 문자, 복소수, 논리 | 불가 | 벡터들의 집합이라 보면 된다.
mode, length(원소갯수), dim(행, 렬), dimnames(행, 렬 인덱스) | ||||||||
데이터프레임 | data.frame | 2 | 수치, 문자, 복소수, 논리 | 가능 | 엑셀과 가장 유사한 데이터구조.
mode, length(행갯수), dim, nrow, ncol
| ||||||||
티블 | tibble | 기본 데이터형이 아닌, 패키지이다.
데이터프레임을 현대적으로 재구성.(오래된 동작들 수정) 거의 유사하나, 조금 더 보기 편한 형태이다. tidyverse 작업을 약간 쉽게 만들어준다. | |||||||||||
시계열 | 2 | 수치, 문자, 복소수, 논리 | 불가 | mode, length, tsp, start(시작시간), end(끝시간), frequency(주기) | |||||||||
배열 | array | 2차원이상 | 수치, 문자, 복소수, 논리 | 불가 | 행렬 안에 행렬이 있다고 보면 된다.
| ||||||||
리스트 | list | 2차원이상 | 수치, 문자, 복소수, 논리, 표현식, call 등 | 가능 | 위의 자료형들을 모두 묶을 수 있다.
보통 데이터들을 묶어 추출할 때 많이 사용한다. list(자료구조, 자료구조2, 자료구조3, ...) 형태로 다 담아버린다. list("이름"=자료구조, "이름2"=자료구조2, ...) 형태로 이름을 지정할 수 있다. |
자료구조 내에 자료형이 혼합불가한 경우, 상위 우선순위의 형태로 바뀐다.(문자>복소수>수치>논리)
각 속성에의 접근[편집 | 원본 편집]
속성명(자료구조)
형태로 접근하거나, 자료구조.속성명
형태로.
자료구조 만들기[편집 | 원본 편집]
모든 것을 다루기엔 가로길이가 짧네; 일단 벡터, 행렬, 데이터프레임만 보면 나머지는 금새 사용법을 익힐 수 있을 것이다.
이름 | 벡터 | 행렬 | 데이터프레임 |
---|---|---|---|
설명 | Combine. 하나의 열을 의미한다.
다른 2차원 이상의 데이터에서 인덱스범위를 지정하는 데 쓰이기도 한다. 벡터를 결합하여 행렬이나 데이터프레임을 만들기도 한다. |
Matrix. | dataframe. |
생성 | c(데이터) | matrix(
data=데이터, nrow=행수 ncol=열수 byrow=기준)
|
data.frame(
변수명(열이름)=벡터1, 변수명(열이름)=벡터2, )
혹은 그냥 벡터의 변수명들만 나열한다. |
자료형 변환 | as.vector(객체) | as.matrix(객체) | as.data.frame(객체) |
연산특성[편집 | 원본 편집]
- 자료형에 연산을 수행하면 각 원소별로 해당 연산을 수행한다.
- 자료형끼리 연산할 때 +, * 따위의 연산은 자료형의 같은 자리에 있는 원소들끼리 연산된다.
- 산술, 비교, 논리연산이 가능하다.(굉장히 다양하고 복잡하게 쓰일 수 있다.)
연산 | 설명 | 연산결과 |
---|---|---|
기본데이터 | 기본데이터는 다음과 같다고 가정하고 연산이 진행되면 어떻게 되는지 살펴보자.
데이터는 x라는 변수에 저장했다고 생각하자. |
[,1] [,2] [,3] [,4]
[1,] 1 3 5 7 [2,] 2 4 6 8 |
* | 곱하기
x*2 |
[,1] [,2] [,3] [,4]
[1,] 2 6 10 14 [2,] 4 8 12 16 |
==
|
일치여부
x%%2==1 #홀수 판별기 |
[,1] [,2] [,3] [,4]
[1,] TRUE TRUE TRUE TRUE [2,] FALSE FALSE FALSE FALSE |
& | 여러 조건 더하기
x%%2==1 & x>3 |
[,1] [,2] [,3] [,4]
[1,] FALSE FALSE TRUE TRUE [2,] FALSE FALSE FALSE FALSE |
*벡터 | 벡터 곱하기
x*c(1,10) |
[,1] [,2] [,3] [,4]
[1,] 1 3 5 7 [2,] 20 40 60 80 |
*벡터 | 벡터가 더 길면?
x*c(1,10,100) |
배수관계에 있지 않으면 에러 |
데이터 접근[편집 | 원본 편집]
기본적으로 선택은 대괄호를 이용한다. 데이터셋[행, 열]
의 인덱스를 사용하거나 벡터를 사용하거나. 일반 언어에서 처음 인덱스가 0인 것과 달리, R은 1부터 시작한다.
일반적으로 인덱스나 $기호, 부분집합(subset)을 활용하여 접근한다.
의도 | 1차원 | 2차원 | 3차원 이상 | |||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
데이터 접근 |
|
여러 방법을 조합해
숫자:숫자 형태는 그 사이의 벡터를 만들어내는 명령이다. |
리스트의 [3]에 접근하면 자료구조 통째로 가져오고,(묶인 덩어리)
리스트의 [[3]]에 접근하면 실제내용에 접근하게 된다. 리스트에서 인덱스를 사용하려면 대괄호를 2개씩 써줘야 한다. 리스트명$열이름$다음차원열이름$.... 형식으로 접근할 수도 있다. 리스트에 이름이 지정된 경우, 리스트$이름$행이름 리스트[[1]][3,4] 형태로 자료구조 안의 원소에 접근할 수 있다. | |||||||||||||||||||||||||
조건에 따른 접근 | 특정 조건을 가진 행만을 포함하기 위해.
구조명[구조명$열이름1 == "해당조건" & 구조명$열이름2 논리식, 열번호] 해당 조건을 가진 행만 뽑아낸다. |
데이터 위치 찾기[편집 | 원본 편집]
자료구조명=="찾을자료"
를 입력하면 해당 위치에만 TRUE를 반환하는 자료구조를 반환한다.
이를 이용하여 자료구조[자료구조==찾을자료]
를 입력하면 해당 자료에 접근할 수 있다.
자료구조 관련 함수[편집 | 원본 편집]
이름 | 기원 | 기능 | 사용법 |
---|---|---|---|
head() | head | 지정한 행만큼 출력한다. | head(데이터셋, 지정숫자) |
str() | 데이터를 확인한다. | str(데이터셋) | |
as() | as | 데이터형을 변환한다. | 열 전체의 변수형을 변환하려면 다음과 같이 한다.
데이터셋$열이름 = as.변수형(데이터셋$열이름) |
논리연산함수[편집 | 원본 편집]
이름 | 기원 | 기능 | 사용법 |
---|---|---|---|
is.TRUE() | 참 여부를 알려줌 | is.TRUE(x) | |
xor() | 배타적 논리합 | xor(x,y) | |
any() | 하나 이상이 참인지? | any(x,y) | |
all() | 모든 원소가 참인지? | all(x,y) |
집합연산함수[편집 | 원본 편집]
예시에 벡터라고 썼지만, 자료구조도 될걸?
이름 | 기원 | 기능 | 사용법 |
---|---|---|---|
union() | 합집합의 개념. 중복된 것은 뺀다. | union(벡터1, 벡터2) | |
setdiff() | 차집합 | setdiff(벡터1, 벡터2) | |
intersect() | 교집합 | intersect(벡터1, 벡터2) | |
setequal() | 둘이 같은 것인가 여부 판별.
순서는 신경쓰지 않는다. |
setequal(x,y) |
벡터 관련 함수[편집 | 원본 편집]
수열생성[편집 | 원본 편집]
이름 | 기원 | 기능 | 사용법 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
seq() | sequence | 순차적 데이터 생성.
|
seq(from=시작숫자, to=마지막숫자, by=증가범위) | ||||||||
rep() | repeat | 반복 데이터 생성
|
rep(반복할값, 반복횟수) | ||||||||
시작:끝 | 시작부터 끝값에 이르기까지 1, -1 간격으로 벡터를 생성한다.(다른 언어에서도 흔히 쓰이는 방식) | 시작:끝 |
데이터조작[편집 | 원본 편집]
이름 | 기원 | 기능 | 사용법 |
---|---|---|---|
length() | length | 데이터 크기 파악 | length(벡터) |
벡터결합[편집 | 원본 편집]
이름 | 기원 | 기능 | 사용법 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
cbind() | column | 벡터를 결합해 행렬을 만든다.
|
cbind(벡터1, 벡터2, 행렬, 데이터프레임 ..., deparse.level=1) | ||||||||
rbind() | row |
2차원 데이터 관련 함수[편집 | 원본 편집]
이름 | 기원 | 기능 | 사용법 |
---|---|---|---|
dim() | 데이터프레임이나 행렬에서 데이터 크기 파악
행과 열 숫자를 순서대로 제공한다. |
dim(데이터셋) | |
데이터 추가하기, 연산하기[편집 | 원본 편집]
이름 | 기원 | 기능 | 사용법 |
---|---|---|---|
변수 생성. 다음의 방법들로 가능하다. | 데이터셋$열이름 = 연산식
| ||
append() | 일반적으로 붙일 자료의 자료구조로 변환해 사용한다. | 붙일대상<-append(붙일대상, 붙일 것)
list_output <- append(list_output, list(iris[i,])) |
데이터 처리[편집 | 원본 편집]
이름 | 기원 | 기능 | 사용법 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
order() | order | 순서대로 정렬한다.
|
새로운데이터셋 = 데이터셋[order(데이터셋[ , '열이름'], decreasing = Ture), ] |
데이터 조작 관련함수[편집 | 원본 편집]
이름 | 기원 | 기능 | 사용법 | ||||||
---|---|---|---|---|---|---|---|---|---|
rank() | rank | 관찰치의 순위를 뽑아낸다..
|
새로운데이터셋 = rank(데이터셋, ties.method=c("열1", "열2", ...) |
데이터 수치 조작[편집 | 원본 편집]
이름 | 기원 | 기능 | 사용법 |
---|---|---|---|
quantile() | qunatile | 각 분위수에 해당하는 값을 꺼낸다. | quantile(데이터셋$열이름, probs = c(0.1, 0.3, 0.5, 0.7, 0.9)
10, 30, 50, 70, 90%에 해당하는 값들을 보여준다. [이걸 변수에 저장하거나 하진 못하나?] |
sum() | sum | 합. | sum(데이터셋$열이름) |
rowSums() | 행별 합. | rowSums(데이터셋[범위])
rowSums(데이터셋[2:8]) | |
colSums() | 열별 합. | colSums(데이터셋[범위]) | |
mean() | mean | 평균. 안에 있는 데이터평균이 아닌, 벡터평균. | mean(데이터셋$열이름) |
rowMeans() | 행별 평균. | rowMeans(데이터셋[범위]) | |
sd() | 표준편차 | sd(데이터셋$열이름) |
위 연산들에서 결측치를 생략하고 계산하고자 한다면 뒤에 na.rm=True
를 붙여주면 된다. ex) sum(데이터셋[범위], na.rm=True)
- ↑ 실제 데이터는 굉장히 많은 열을 사용하기에, 숫자로만 다루기엔 어려움이 있다. 열의 순서가 바꾸는 경우도 있고.