변수

자료 기본 형태: 수치형(숫자), 문자형(문자), 논리형(TURE, FALSE).

mode(): 자료의 형태 알아보기.

[1:4]: python 인덱싱과 다르게 1부터 4까지임.


  • 변수 넣기

    x ← 2, y ← 4: 변수는 왼쪽, 값은 오른쪽!

    r.f. x=3 혹은 3->x의 형식은 가능은 하지만 피해야 한다.

    z ← c(1, 2, 3, 4): 여러 값을 변수에 넣어주려면 column vector로 묶어줘야 함.


  • 벡터형 변수(Vector)
    • 데이터 추가

      변수 ← c(변수, 추가변수): 기존 변수에 추가 변수를 더하여 다시 넣어줌.

      새변수[length(새변수)+1] ← 추가변수: 새로운 변수 마지막 위치에 추가변수 집어넣음.

      append(요소, 추가요소, after=n): ‘요소' ‘n'번째 다음 위치에 ‘추가요소'를 넣어줌.

      n=0이면 맨 앞.

      인덱싱한 특정 위치에 값을 넣어줄 수도 있음.

      v[2] ← 3, mat[2,] ← c(1, 3, 2)

    • 논리 의문문

      원소들에 대해 논리형으로 반환.

      a<10: 10보다 작으면 TRUE, 아니면 FALSE 값으로 반환.

    • 벡터형 인덱싱

      v[1]: 벡터형 변수의 첫번째.

      v[1:4]: 1번부터 4번까지.

      v[-3]: 3번 원소 삭제 후 불러옴. 원본 데이터는 남아 있음.

      v[c(1, 2, 5)]: 여러 위치 인덱싱.

      문자형에 대해서 double Indexing은 불가능.

      a[2][3] ≠ ‘t': 원소 ‘cat'에서 ‘t' 인덱싱 불가.


  • 행렬형 변수(Matrix)

    행렬은 열이 우선.

    • 행렬 만들기

      dim(a) ← c(x,y): a를 x행 y열 행렬로 바꿈.

      x*y == length(a)여야 하는 듯.

      matrix(요소, row, column): ‘요소', ‘행', ‘열'로 행렬 만드는 간단한 방법.

      matrix(요소, nrow=3, byrow=T): ‘요소'를 행이 3, 열은 자동으로 생성된 행렬을 만듦.

      byrow=T`: 행에 따라 수평으로 ‘요소'를 넣어줌.

    • 행렬 인덱싱

      mat[1,]: 1행 전체.

      mat[,1]: 1열 전체.

      mat[1,, drop=FALSE]: 행 이름을 drop하지 않고 요소를 불러옴.

      comma 두개, FALSE는 대문자.

    • 행, 열 이름 변경

      rownames(mat) ← c('row1', 'row2'): 행 이름 바꾸기.

      colnames(mat) ← c('col1', 'col2'): 열 이름 바꾸기.

    • 행렬의 연산 (참고)

      t(A): A의 전치행렬.

      [행, 열]을 [열, 행]으로 바꿈.

      solve(A): A의 역행렬 계산.

      A%*%B: 행렬 곱셈.

      diag(n): n*n 단위행렬 만들기.


  • 리스트형 변수(List)
    • 리스트 만들기

      list는 [[1]] [1] 값1의 형태. 값을 넣어주면 $a [1] 값1 의 형태.

      list(1, 2, 3): [[1]] [1] 1 형태의 리스트 생성.

      list(a=1, b=2): $a [1] 1 형태의 리스트 생성.

      as.list(d): 데이터 d를 리스트 형태로 반환.

    • 리스트 인덱싱

      list[n]: [[n]] [1] 값 형태로 n번 리스트와 값을 반환.

      list[[n]]: n번 리스트의 값 반환.

      list[['a']]: a리스트 값 반환.

    • 리스트 수정

      list$a ← 값: a리스트 값 수정.

      list[[n]] ← 값: n번 리스트 값 수정.

      list$a ← NULL: a리스트 값 삭제.

      list$a ← NA: a리스트 값 결측값 처리.

      is.na(list): 리스트 값 중 결측값을 논리형으로 확인.

      list[is.na(리스트)]: 값이 NA인 요소 인덱싱.

    • 리스트의 벡터형 변환

      sapply(리스트, 함수): 내부 리스트 각각에 대해 함수 적용.

      함수에 괄호는 제외(mean, sum)

      lapply(리스트, 함수): sapply와 같지만 리스트 형태로 반환.

      na.rm=TRUE): na 제외 후 함수 적용.

      unlist(list): 리스트를 하나의 벡터형 변수로 반환.


  • 데이터프레임(Dataframe)

    Dataframe은 열들의 모임이다.

    • 데이터프레임 만들기

      data.frame(1열, 2열): 변수를 열로 갖는 데이터프레임 생성.

      as.data.frame(리스트): 리스트가 포함된 경우의 데이터프레임 생성.

      열 이름은 $으로.

    • 데이터프레임 인덱싱

      d[x,y]: x행, y열 값 반환.

      d[,n]: n번째 열 전체.

      d[n,]: n번째 행 전체.

      names(): 데이터의 column들을 반환.

      d$열[n]: 데이터프레임 d의 특정 열의 n번째.

      d$열<n: 데이터프레임 d의 특정 열 중 조건에 해당하는 값을 boolean 형태로.

      d[d$열==n,]: 조건에 해당하는 행만 반환. 쉼표 중요!

    • 데이터프레임 요약

      head(d): 데이터프레임 d를 앞에서 6개만 보여줌.

      tail(d): 데이터프레임 d를 뒤에서 6개만 보여줌.

      View(d): 데이터프레임 d를 표 형태로 보여줌.

      summary(d): 데이터프레임 d의 요약 값을 보여줌.

      mean > median: 분포 확인 가능. 값이 큰 이상치 가능성.

    • 데이터프레임 함수

      split(d$x, d$y): xy별로 분류해서 리스트로 반환.

      tapply(d$x, d$y, 함수): d$xd$y별로 구분 후 각각에 대해 함수 적용.

      == by(x,y,f): xy에 따라 f함수를 구해라.

    • 데이터프레임 합치기

      cbind(x,y,z): 데이터들을 옆(column)으로 합쳐줌.

      부족한 데이터는 반복함..

      rbind(): 데이터들을 아래(row)로 합쳐줌.

      merge(x,y,by=''): by를 기준으로 x와 y를 합침.

      공통된 key끼리는 결합되고, 없는 항목은 삭제.


  • 데이터의 사용

    attach(d): 앞으로 데이터 d를 사용하겠다는 선언으로, 밑의 항목들을 내부 변수처럼 인식하여 d$ 표시를 생략할 수 있음.

    with(d, ~): 괄호 내부에서 데이터 d를 사용.

    ,data=d): 내부에서 데이터 d를 사용.


  • 결측값(Not Available)
    • 결측값 종류

      NULL: 입력 자체가 없는 것.

      NA: NA라는 결측치. (태아 나이)

      inf: 무한대.

      NAN: Not A Number. 수학적으로 제대로 된 정의가 아님. (0/0)

    • 결측값 처리

      • is.na()

      is.na(): NA를 TRUE(=1)로 반환.

      sum(is.na()): 결측값 개수 반환.

      !를 붙이면 TRUE(1)와 FALSE(0) 값 변경

      d[!is.na(d)]: 변수 d에서 결측값을 제외.

      == sum(is.na()==FALSE,)

      na.rm=TRUE와 유사.

      ,: 행 전체

      d[is.na(d)] ← 데이터: 결측값을 다른 값으로 대체.

      • 그 외

      complete.cases(): NA 항목의 데이터 제거.

      !is.na()와 유사.

      na.omit(): NA 값을 지움.

      이 방법은 데이터가 망가져서 그닥…