R:자료구조: 두 판 사이의 차이

학교의 모든 지식. SMwiki
둘러보기로 이동 검색으로 이동
잔글편집 요약 없음
 
559번째 줄: 559번째 줄:
|
|
|일반적으로 붙일 자료의 자료구조로 변환해 사용한다.
|일반적으로 붙일 자료의 자료구조로 변환해 사용한다.
|append(붙일대상, 붙일 것)
|붙일대상<-append(붙일대상, 붙일 것)
list_output <- append(list_output, list(iris[i,]))
|}
|}
===데이터 처리===
===데이터 처리===

2020년 9월 24일 (목) 21:18 기준 최신판

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 수치/문자 불가 순서가 있는 벡터라고 보면 된다.

orert=TRUE 정렬순서를 정할 수 있다. level=정렬기준(벡터)

행렬 matrix 2 수치, 문자, 복소수, 논리 불가 벡터들의 집합이라 보면 된다.
속성 설명
nrow=숫자 행갯수
ncol=숫자 열갯수
byrow=불리언 TRUE면 행부터 채운다는 의미.

mode, length(원소갯수), dim(행, 렬), dimnames(행, 렬 인덱스)

데이터프레임 data.frame 2 수치, 문자, 복소수, 논리 가능 엑셀과 가장 유사한 데이터구조.

mode, length(행갯수), dim, nrow, ncol

속성 설명
티블 tibble 기본 데이터형이 아닌, 패키지이다.

데이터프레임을 현대적으로 재구성.(오래된 동작들 수정) 거의 유사하나, 조금 더 보기 편한 형태이다.

tidyverse 작업을 약간 쉽게 만들어준다.

시계열 2 수치, 문자, 복소수, 논리 불가 mode, length, tsp, start(시작시간), end(끝시간), frequency(주기)
배열 array 2차원이상 수치, 문자, 복소수, 논리 불가 행렬 안에 행렬이 있다고 보면 된다.
속성 설명
dim=벡터 벡터로 각 차원당 몇 개의 데이터를 담을지 전달.
리스트 list 2차원이상 수치, 문자, 복소수, 논리, 표현식, call 등 가능 위의 자료형들을 모두 묶을 수 있다.

보통 데이터들을 묶어 추출할 때 많이 사용한다.

list(자료구조, 자료구조2, 자료구조3, ...) 형태로 다 담아버린다.

list("이름"=자료구조, "이름2"=자료구조2, ...) 형태로 이름을 지정할 수 있다.

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

각 속성에의 접근[편집 | 원본 편집]

속성명(자료구조) 형태로 접근하거나, 자료구조.속성명 형태로.

자료구조 만들기[편집 | 원본 편집]

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

이름 벡터 행렬 데이터프레임
설명 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]에 접근하면 자료구조 통째로 가져오고,(묶인 덩어리)

리스트의 [[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 순차적 데이터 생성.
옵션 설명
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(데이터셋)

데이터 추가하기, 연산하기[편집 | 원본 편집]

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


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

append() 일반적으로 붙일 자료의 자료구조로 변환해 사용한다. 붙일대상<-append(붙일대상, 붙일 것)

list_output <- append(list_output, list(iris[i,]))

데이터 처리[편집 | 원본 편집]

이름 기원 기능 사용법
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. 실제 데이터는 굉장히 많은 열을 사용하기에, 숫자로만 다루기엔 어려움이 있다. 열의 순서가 바꾸는 경우도 있고.