R:자료구조
편집하기
Sam
(
토론
|
기여
)
님의 2020년 8월 25일 (화) 21:18 판
(
→연산특성
)
(
차이
)
← 이전 판
|
최신판
(
차이
) |
다음 판 →
(
차이
)
둘러보기로 이동
검색으로 이동
경고: 이 문서의 오래된 판을 편집하고 있습니다.
이것을 게시하면, 이 판 이후로 바뀐 모든 편집이 사라집니다.
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
{{R}}<br /> ==개요== 자료구조를 수용하기 위한 자료객체. ===종류=== 데이터형과 별개로 있는 자료형이다. {| class="wikitable" !객체 !코드명 !차원 !유형 !혼합가능여부 !객체 속성 |- |벡터 |vector |1 |수치, 문자, 복소수, 논리 |불가(하나의 유형만 사용) (상위 우선순위의 형태로 바뀐다) |mode(자료유형), length(길이), names(각 성분원소의 이름(인덱스)) |- |요인 |factor |1 |수치/문자 |불가 | |- |행렬 |matrix |2 |수치, 문자, 복소수, 논리 |불가 |mode, length(원소갯수), dim(행, 렬), nrow(행갯수), ncol(열갯수), dimnames(행, 렬 인덱스) |- |데이터프레임 |data.frame |2 |수치, 문자, 복소수, 논리 |가능 |mode, length(행갯수), dim, nrow, ncol |- |시계열 | |2 |수치, 문자, 복소수, 논리 |불가 |mode, length, tsp, start(시작시간), end(끝시간), frequency(주기) |- |배열 |array |2차원이상 |수치, 문자, 복소수, 논리 |불가 | |- |리스트 |list |2차원이상 |수치, 문자, 복소수, 논리, 표현식, call 등 |가능 | |} ====속성에의 접근==== 속성에 접근하려면 <code>해당속성(객체명)</code> 을 기입하면 된다. ===연산특성=== # 자료형에 연산을 수행하면 각 원소별로 해당 연산을 수행한다. # 자료형끼리 연산할 때 +, * 따위의 연산은 자료형의 같은 자리에 있는 원소들끼리 연산된다. # 산술, 비교, 논리연산이 가능하다.(굉장히 다양하고 복잡하게 쓰일 수 있다.) {| class="wikitable" |+ !연산 !설명 !연산결과 |- |기본데이터 |기본데이터는 다음과 같다고 가정하고 연산이 진행되면 어떻게 되는지 살펴보자. 데이터는 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 |- |<code>==</code> |일치여부 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) |배수관계에 있지 않으면 에러 |} ==자료구조 만들기== 모든 것을 다루기엔 가로길이가 짧네; 일단 벡터, 행렬, 데이터프레임만 보면 나머지는 금새 사용법을 익힐 수 있을 것이다. {| 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(객체) |} ==자료구조 관련 함수== {| class="wikitable" !이름 !기원 !기능 !사용법 |- |head() |head |지정한 행만큼 출력한다. |head(데이터셋, 지정숫자) |- |str() | |데이터를 확인한다. |str(데이터셋) |- |as() |as |데이터형을 변환한다. |열 전체의 변수형을 변환하려면 다음과 같이 한다. 데이터셋$열이름 = as.변수형(데이터셋$열이름) |} === 논리연산함수 === {| class="wikitable" !이름 !기원 !기능 !사용법 |- |is.TRUE() | |참 여부를 알려줌 |is.TRUE(x) |- |xor() | |배타적 논리합 |xor(x,y) |- |any() | |하나 이상이 참인지? |any(x,y) |- |all() | |모든 원소가 참인지? |all(x,y) |} === 집합연산함수 === 예시에 벡터라고 썼지만, 자료구조도 될걸? {| class="wikitable" !이름 !기원 !기능 !사용법 |- |union() | |합집합의 개념. 중복된 것은 뺀다. |union(벡터1, 벡터2) |- |setdiff() | |차집합 |setdiff(벡터1, 벡터2) |- |intersect() | |교집합 |intersect(벡터1, 벡터2) |- |setequal() | |둘이 같은 것인가 여부 판별. 순서는 신경쓰지 않는다. |setequal(x,y) |}<br /> ==데이터 접근== 일반적으로 인덱스나 $기호, 부분집합(subset)을 활용하여 접근한다. 기본적으로 선택은 데이터셋[행, 열] 의 인덱스를 사용하거나 벡터를 사용하거나 한다. 일반 언어에서 처음 인덱스가 0인 것과 달리, R은 1부터 시작한다. {| class="wikitable" !의도 !1차원 !2차원 !3차원 이상 |- |데이터 접근 | {| class="wikitable" |+ !의도 !방법(예시) |- |데이터1개 접근 |벡터명[1] |- |여러 개 접근 |벡터명[c(1,3,5,9)] |- |범위 접근 |벡터명[2:5] |- |제외하고 접근 |벡터명[-3] |} | {| class="wikitable" !의도 !방법(예시) |- |데이터1개 접근 |구조명[2,3] |- |여러 개 접근 |구조명[c(1,2,3), ] |- |행 전부 |구조명[1, ] |- | rowspan="2" |열 전부 |구조명[ ,1] |- |구조명$열이름<ref>실제 데이터는 굉장히 많은 열을 사용하기에, 숫자로만 다루기엔 어려움이 있다. 열의 순서가 바꾸는 경우도 있고.</ref> |- |범위 접근 |구조명[2:3, ] |- |제외하고 접근 |구조명[ ,-1] 구조명[-(1:3), -2] |} 여러 방법을 조합해 <code>구조명[2:3, -2]</code> 등의 형태로 사용 가능 |리스트의 [3]에 접근하면 원소 1개. 리스트의 <nowiki>[[3]]</nowiki>에 접근하면 벡터 혹은 자료형에 접근하게 된다. 리스트에서 인덱스를 사용하려면 대괄호를 2개씩 써줘야 한다. 리스트명$열이름$다음차원열이름$.... 형식으로 접근할 수도 있다. |- |조건에 따른 접근 | |특정 조건을 가진 행만을 포함하기 위해. 구조명[구조명$열이름1 == "해당조건" & 구조명$열이름2 논리식, 열번호] 해당 조건을 가진 행만 뽑아낸다. | |}<br /> ==벡터 관련 함수== ===수열생성=== {| class="wikitable" !이름 !기원 !기능 !사용법 |- |seq() |sequence |순차적 데이터 생성. {| class="wikitable" |+ !옵션 !설명 |- |along.with=객체명 |해당하는 객체와 동일한 크기로 자료열을 생성. |- |length=자연수 |by옵션 대신 이 옵션을 넣으면 증가범위를 자동으로 <code>(마지막수 - 시작수) / (자연수-1)</code> 로 잡는다. |- |length.out=수 |수만큼 뽑되, 동일간격으로 뽑는다. |} <br /> |seq(from=시작숫자, to=마지막숫자, by=증가범위) |- |rep() |repeat |반복 데이터 생성 {| class="wikitable" !옵션 !설명 |- |times= |반복횟수를 기입한다. ex) 1,2,3,1,2,3 |- |each= |각각 원소별 반복횟수를 기입한다. ex) 1,1,2,2,3,3 |} |rep(반복할값, 반복횟수) |- |시작:끝 | |시작부터 끝값에 이르기까지 1, -1 간격으로 벡터를 생성한다.(다른 언어에서도 흔히 쓰이는 방식) |시작:끝 |} ===데이터조작=== {| class="wikitable" !이름 !기원 !기능 !사용법 |- |length() |length |데이터 크기 파악 |length(벡터) |} ===벡터결합=== {| class="wikitable" !이름 !기원 !기능 !사용법 |- |cbind() |column | rowspan="2" |벡터를 결합해 행렬을 만든다. {| class="wikitable" |+deparse.level !옵션 !설명 |- |0 |함수 내에 정의된 이름만 사용 |- |1 |기존에 정의된 객체 이름 사용 |- |2 |이름 자동 생성 |} |cbind(벡터1, 벡터2, 행렬, 데이터프레임 ..., deparse.level=1) |- |rbind() |row | |} ==2차원 데이터 관련 함수== {| class="wikitable" !이름 !기원 !기능 !사용법 |- |dim() | |데이터프레임이나 행렬에서 데이터 크기 파악 행과 열 숫자를 순서대로 제공한다. |dim(데이터셋) |- | | | | |} ===데이터 추가하기, 연산하기=== {| class="wikitable" !이름 !기원 !기능 !사용법 |- | | |변수 생성. 다음의 방법들로 가능하다. |데이터셋$열이름 = 연산식 데이터셋[, "열이름"] = 연산식 |} ===데이터 처리=== {| class="wikitable" !이름 !기원 !기능 !사용법 |- |order() |order |순서대로 정렬한다. {| class="wikitable" |+ !속성 !설명 |- |decreasing= |내림차순여부 True혹은False 열이름에 '-'를 붙이면 속성값과 바꾼다. |- |na.last= |TRUE면 na를 맨 뒤에. |- | | |} |새로운데이터셋 = 데이터셋[order(데이터셋[ , '열이름'], decreasing = Ture), ] |} ==데이터 조작 관련함수== {| class="wikitable" !이름 !기원 !기능 !사용법 |- |rank() |rank |관찰치의 순위를 뽑아낸다.. {| class="wikitable" |+ !속성 !설명 |- |ties.method= |c("열이름1", "열이름2", ...) 형태로 같은 값에 대한 우선순위 할당. |- |na.last= |TRUE면 na를 맨 뒤에. |} |새로운데이터셋 = rank(데이터셋, ties.method=c("열1", "열2", ...) |} ===데이터 수치 조작=== {| class="wikitable" !이름 !기원 !기능 !사용법 |- |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(데이터셋$열이름) |}위 연산들에서 결측치를 생략하고 계산하고자 한다면 뒤에 <code>na.rm=True</code>를 붙여주면 된다. ex) <code>sum(데이터셋[범위], na.rm=True)</code> <br /> ===데이터 통계=== {| class="wikitable" !이름 !기원 !기능 !사용법 |- |table() |table |빈도 테이블 작성. 열 안에 속한 요소가 몇 번씩 등장하는지 세어 테이블로 만든다. 열 안에 속한 속성 1이 몇개, 2가 몇개 인지 보여준다. |table(데이터셋$열이름) 테이블명 = as.data.frame(table(데이터셋$열이름)) #뽑아서 데이터베이스로 만들 수도 있다. |- |xtabs() | |2차원 테이블 작성. 열이름1과 열이름2 안에 나타나는 조합의 수별로 몇 번씩 등장하는지 센다. |테이블명 = as.data.frame(xtabs(~ 데이터셋$열이름1 + 데이터셋$열이름2)) |- |aggregate() | |열이름1에 속한 데이터들의 연산결과를 정리해 요약한다. |aggregate(데이터셋[1:3], 데이터셋[기준열번호], 연산) aggregate(데이터셋[2:3], 데이터셋[1], mean) #1열을 기준으로 2,3열 데이터의 평균을 구한다. |} <references />
요약:
학교의 모든 지식. SMwiki에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는
학교의 모든 지식. SMwiki:저작권
문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)
이 문서에서 사용한 틀:
틀:R
(
편집
)
둘러보기 메뉴
개인 도구
로그인하지 않음
토론
기여
로그인
이름공간
문서
토론
한국어
보기
읽기
편집
원본 편집
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보