R:자료구조

학교의 모든 지식. SMwiki
Sam (토론 | 기여)님의 2020년 9월 12일 (토) 12:24 판 (→‎속성에의 접근)
둘러보기로 이동 검색으로 이동

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 등 가능

자료구조 내에 자료형이 혼합불가한 경우, 상위 우선순위의 형태로 바뀐다.(문자>복소수>수치>논리)

자료구조 만들기

모든 것을 다루기엔 가로길이가 짧네; 일단 벡터, 행렬, 데이터프레임만 보면 나머지는 금새 사용법을 익힐 수 있을 것이다.

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

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

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

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

data=데이터,

nrow=행수

ncol=열수

byrow=기준)


byrow가 T라면 행기준, R이면 열기준

data.frame(

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

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

)


필요한 벡터만큼 넣는다.

혹은 그냥 벡터의 변수명들만 나열한다.

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


연산특성

  1. 자료형에 연산을 수행하면 각 원소별로 해당 연산을 수행한다.
  2. 자료형끼리 연산할 때 +, * 따위의 연산은 자료형의 같은 자리에 있는 원소들끼리 연산된다.
  3. 산술, 비교, 논리연산이 가능하다.(굉장히 다양하고 복잡하게 쓰일 수 있다.)
연산 설명 연산결과
기본데이터 기본데이터는 다음과 같다고 가정하고 연산이 진행되면 어떻게 되는지 살펴보자.

데이터는 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차원 이상
데이터 접근
의도 방법(예시)
데이터1개 접근 벡터명[1]
여러 개 접근 벡터명[c(1,3,5,9)]
범위 접근 벡터명[2:5]
제외하고 접근 벡터명[-3]
의도 방법(예시)
데이터1개 접근 구조명[2,3]
여러 개 접근 구조명[c(1,2,3), ]
범위 접근 구조명[2:3, ]
1행 전부 구조명[1, ]
1열 전부 구조명[ ,1]
구조명$열이름[1]
제외하고 접근 구조명[ ,-1]

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

여러 방법을 조합해

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

숫자:숫자 형태는 그 사이의 벡터를 만들어내는 명령이다.

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

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

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


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

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

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

열번호]

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


자료구조 관련 함수

이름 기원 기능 사용법
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 순차적 데이터 생성.
옵션 설명
along.with=객체명 해당하는 객체와 동일한 크기로 자료열을 생성.
length=자연수 by옵션 대신 이 옵션을 넣으면 증가범위를 자동으로 (마지막수 - 시작수) / (자연수-1) 로 잡는다.
length.out=수 수만큼 뽑되, 동일간격으로 뽑는다.


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

데이터조작

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

벡터결합

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

2차원 데이터 관련 함수

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

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

dim(데이터셋)

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

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


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

데이터 처리

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

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

na.last= TRUE면 na를 맨 뒤에.
새로운데이터셋 = 데이터셋[order(데이터셋[ , '열이름'], decreasing = Ture), ]

데이터 조작 관련함수

이름 기원 기능 사용법
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)


  1. 실제 데이터는 굉장히 많은 열을 사용하기에, 숫자로만 다루기엔 어려움이 있다. 열의 순서가 바꾸는 경우도 있고.