R:자료구조

학교의 모든 지식. SMwiki
Sam (토론 | 기여)님의 2020년 8월 22일 (토) 18:10 판 (Sam님이 R:자료형 문서를 R:자료구조 문서로 이동했습니다)
둘러보기로 이동 검색으로 이동

R언어 공부를 위한 틀 틀:R

  1. R:개요
    1. R:코딩팁
    2. R:연산자
  2. R:객체
    1. R:자료형
    2. R:자료구조
  3. R:함수
    1. R:자주사용하는 함수
      1. R:aplly계열(반복문, 중복작업)
  4. R:제어문
    1. R:조건문
    2. R:반복문
  5. R:자료조작
    1. R:데이터프레임
    2. R:행렬
  6. R:데이터 저장과 불러오기
    1. R:데이터베이스
    2. R:특정조건 추출하기
  7. R:패키지
    1. R:magrittr(파이프연산자)
    2. R:dplyr(데이터프레임 조작)
    3. R:ggplot2(그래프그리기)
    4. R:KoNLP(한글 텍스트마이닝), wordcloud2(워드클라우드)
    5. R:ddply(데이터 집계, 조작)
    6. R:tidyverse(데이터를 정제하는 패키지들의 집합)
    7. R:jsonlite(JSON 파일 다루기)
    8. R:pbapply(apply계열에 진행바를 보여준다.)
  8. R:활용
    1. R:데이터 접근
    2. R:연관성분석
    3. R:분류분석
  9. R:팁
    1. R:연구용 팁

개요

자료구조를 수용하기 위한 자료객체.

종류

데이터형과 별개로 있는 자료형이다.

객체 코드명 차원 유형 혼합가능여부 객체 속성
벡터 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 등 가능

속성에의 접근

속성에 접근하려면 해당속성(객체명) 을 기입하면 된다.

연산특성

자료형에 연산을 수행하면 각 원소별로 해당 연산을 수행한다. 자료형끼리 연산할 때 +, * 따위의 연산은 자료형의 같은 자리에 있는 원소들끼리 연산된다.

자주 사용하는 자료형

이름 벡터 행렬 데이터프레임
설명 Combind. 하나의 열을 의미한다.

다른 2차원 이상의 데이터에서 인덱스범위를 지정하는 데 쓰이기도 한다.

벡터를 결합하여 행렬이나 데이터프레임을 만들기도 한다.

Matrix. dataframe.
생성 c(데이터) matrix(

data=데이터,

nrow=행수

ncol=열수

byrow=기준)

data.frame(

변수명(열이름)=벡터1,

변수명(열이름)=벡터2,

)

필요한 벡터만큼 넣는다.

자료형 변환 as.vector(객체) as.matrix(객체) as.data.frame(객체)

데이터형 관련 함수

이름 기원 기능 사용법
head() head 지정한 행만큼 출력한다. head(데이터셋, 지정숫자)
str() 데이터를 확인한다. str(데이터셋)
as() as 데이터형을 변환한다. 열 전체의 변수형을 변환하려면 다음과 같이 한다.

데이터셋$열이름 = as.변수형(데이터셋$열이름)


데이터 접근

일반적으로 인덱스나 $기호, 부분집합(subset)을 활용하여 접근한다.

기본적으로 선택은 데이터셋[행, 열] 의 인덱스를 사용하거나 벡터를 사용하거나 한다. 일반 언어에서 처음 인덱스가 0인 것과 달리, R은 1부터 시작한다.

의도 1차원 2차원 3차원 이상
데이터 접근
의도 방법(예시)
데이터1개 접근 벡터명[1]
여러 개 접근 벡터명[c(1,3,5,9)]
범위 접근 벡터명[2:5]
제외하고 접근 벡터명[-3]
의도 방법(예시)
데이터1개 접근 구조명[2,3]
여러 개 접근 구조명[c(1,2,3), ]
행 전부 구조명[1, ]
구조명$열이름
열 전부 구조명[ ,1]
범위 접근 구조명[2:3, ]
subset(데이터셋, select=범위)
제외하고 접근 구조명[ ,-1]

구조명[-(1:3), -2]

여러 방법을 조합해

구조명[2:3, -2] 등의 형태로 사용 가능

리스트의 [3]에 접근하면 원소 1개.

리스트의 [[3]]에 접근하면 벡터 혹은 자료형에 접근하게 된다.

리스트에서 인덱스를 사용하려면 대괄호를 2개씩 써줘야 한다.


리스트명$열이름$다음차원열이름$.... 형식으로 접근할 수도 있다.

조건에 따른 접근 특정 조건을 가진 행만을 포함하기 위해.

구조명[구조명$열이름1 == "해당조건" & 구조명$열이름2 논리식,

열번호]

해당 조건을 가진 행만 뽑아낸다.


벡터 관련 함수

수열생성

이름 기원 기능 사용법
seq() sequence 순차적 데이터 생성.
옵션 설명
along.with=객체명 해당하는 객체와 동일한 크기로 자료열을 생성.
length=자연수 by옵션 대신 이 옵션을 넣으면 증가범위를 자동으로 (마지막-시작) / (자연수-1) 로 잡는다.


seq(from=시작숫자, to=마지막숫자, by=증가범위)
rep() repeat 반복 데이터 생성 rep(반복할값, 반복횟수)
시작:끝 시작부터 끝값에 이르기까지 1, -1 간격으로 벡터를 생성한다.(다른 언어에서도 흔히 쓰이는 방식) 시작:끝

데이터조작

이름 기원 기능 사용법
length() length 데이터 크기 파악 length(벡터)

벡터결합

이름 기원 기능 사용법
cbind() column 벡터를 결합해 행렬을 만든다.
deparse.level
옵션 설명
0 함수 내에 정의된 이름만 사용
1 기존에 정의된 객체 이름 사용
2 이름 자동 생성
cbind(벡터1, 벡터2, 행렬, 데이터프레임 ..., deparse.level=1)
rbind() row

2차원 데이터 관련 함수

직관적인 사용을 위해 %>%를 사용하는데, 이는 dplyr의 기능이다.

이름 기원 기능 사용법
dim() 데이터프레임이나 행렬에서 데이터 크기 파악

행과 열 숫자를 순서대로 제공한다.

dim(데이터셋)

데이터 추가하기, 연산하기

이름 기원 기능 사용법
mutate() 하나의 변수를 추가한다. 데이터셋 = 데이터셋 %>%

mutate(추가할열이름 = 연산식)

변수 생성. 다음의 방법들로 가능하다. 데이터셋$열이름 = 연산식


데이터셋[, "열이름"] = 연산식

mutate_if() 조건에 해당하면 실행한다.

mutate_if(판별문, 실행문)

데이터셋 = 데이터셋 %>%

mutate_if(is.integer, as.numeric)

mutate_at() 지정한 변수들에 대해 계산 적용.

열이름에 '-'를 넣으면 그 변수는 빼고 계산한다.

데이터셋 = 데이터셋 %>%

mutate_at(vars(열이름1, 열이름2, ...,), 연산식)

데이터 처리

이름 기원 기능 사용법
order() order 순서대로 정렬한다.
속성 설명
decreasing= 내림차순여부 True혹은False

열이름에 '-'를 붙이면 속성값과 바꾼다.

na.last= TRUE면 na를 맨 뒤에.
새로운데이터셋 = 데이터셋[order(데이터셋[ , '열이름'], decreasing = Ture), ]
slice() index를 설정하여 원하는 행을 추출한다. 데이터셋 = 데이터셋 %>%

slice(1:10)

select() index를 설정하여 원하는 열을 추출한다.

column명을 쓸 수 있다.

데이터셋 = 데이터셋 %>%

select(1:10, 열이름1, 열이름2, ...)

filter() 원하는 조건에 해당하는 데이터 추출. 데이터셋 = 데이터셋 %>%

filter(열이름1 = "해당내용")

select_if() 뽑는 조건을 설정할 수 있다.

ex) 데이터타입에 따라 뽑는다든가.

데이터셋 = 데이터셋 %>%

select_if(is.integer)

arrange() 데이터 정렬.

기본적으로 오름차순인데, 변수에 '-'를 붙여주면 내림차순이 된다.

데이터셋 = 데이터셋 %>%

arrange(-열이름)

top_n() 가장 값이 높은 값들을 추출.

top_n(숫자, 열이름)

top_n(5, Year)
distinct() 중복데이터 제거.

해당 열이름에서 하나라도 중복되면 지운다.

데이터셋 = 데이터셋 %>%

distinct(열이름1, 열이름2, 열이름3, ...)

데이터 조작 관련함수

이름 기원 기능 사용법
rank() rank 관찰치의 순위를 뽑아낸다..
속성 설명
ties.method= c("열이름1", "열이름2", ...) 형태로 같은 값에 대한 우선순위 할당.
na.last= TRUE면 na를 맨 뒤에.
새로운데이터셋 = 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)


데이터 통계

이름 기원 기능 사용법
table() 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열 데이터의 평균을 구한다.