R  데이터 조작 I

 

  1. 데이터 읽고 쓰기, 데이터 자체를 저장, 데이터끼리 묶기

    1. read.csv(파일명, header=TRUE/FALSE)

      1. 읽어올 때 문자들을 모두 factor처리하기 때문에, 이를 문자열로 바꾸기 위해 -> stringAsFactors=FALSE처리하여 들여옴 ex)read.csv(a.csv, stringAsFactors=FALSE)

      2. NA를 읽어들어 올때, 이를 문자처리 하기 위해 NIL로 변환되서 들어옴.  이 때, 그 열의 나머지 숫자들도 문자처리해서 이를 막아줘야 함. -> na.strings이용 ex) x <- read.csv(a.csv, na.strings=c(‘NIL’)) : 이러면 NIL을 인식해 na처리

    2. write.csv(변수, ‘파일이름.csv’,row.names = F)

      1. row.names는 행에 자동으로 이름을 부여하는가인데, default가 T

      2. save,load: 데이터만 저장하고 읽어올 수 있음

        1. save(x,y,file=’xy.RData’)

        2. load(‘xy.RData’)

    3. rbind/cbind: rowbind/columnbind

      1. rbind로 벡터나 데이터 프레임을 결합할 수 있음

      2. data.frame을 생성할 때, stringsAsFactors = FALSE로 하는 이유는 데이터가 명목형이 아닌 단순 문자열이기 때문이다.

      3. 데이터프레임은 cbind로 결합은 가능하나 오른쪽에 같다 붙이는거라서 새로운 행이 추가됨, 목적과 맞지 않음.

        1. $를 사용해서 열 추가

 

  1. apply류 함수

    1. 기본 구조 apply류함수(적용대상, 함수->만드는 것 가능)

      1. ex)apply(x, function(x){x*2})

    2. 행렬의 경우 -> apply함수를 사용

      1. ex)apply(행렬, 1/2=행/열, apply함수명)

      2. iris데이터를 이용 -> apply(iris[,1:4],2,sum): 4개 열들의 합

        1. 대체가능한 함수들

          1. rowSums(),colSums()

          2. ex) colSums(iris[,1:4])

    3. 벡터 또는 리스트의 경우 -> lapply

      1. ex)lapply(1:3,function(x){x*2}) -> output이 list가 아닌 벡터이고 싶을 때 -> unlist(리스트) 사용

      2. list를 사용해서 평균구하기 -> ex) lapply(리스트,mean)

        1. list인 아웃풋을 데이터프레임으로 변환하고 싶을 때 -> 

          1. unlist(): 벡터로 변환

          2. matrix(): 행렬로 변환

          3. as.data.frame(): 행렬을 데이터프레임으로 변환

          4. do.call(): data.frame(do.call(cbind, lapply(iris[,1:4],mean))) -> 이런 방식 가능

    4. 벡터, 리스트, 데이터프레임의 경우, output이 list가 아닌 행렬,벡터로 반환하는 함수 -> sapply

      1. ex) sapply(iris[,1:4],mean) -> 결과가 벡터 -> as.data.frame을 이용해서 데이터프레임으로 구조 변환 가능

        1. 이 때, 행과 열이 뒤바뀌어서 나오는데, t(행렬)을 수행해서 원래 모양으로 변형

      2. 한가지 타입만 저장 가능한 벡터, 행렬, 배열로 반환하기 때문에 입력값들이 동일한 구조형이어야한다. -> 여러 데이터 타입에 대해 사용하고 싶다면 lapply()사용

    5. 어떤 범주에 해당f하는 값들만 연산하고 싶을 때 -> tapply()

      1. ex) tapply(iris$Sepal.Length, iris$Species, mean): 종에 따른 꽃받침 길이의 평균

    6. 함수에 인자를 넘겨주어서 연산 -> mapply()

      1. ex) mapply(function, c(1,2,3), c(‘a’,’b’,’c’))를 수행하면 (1,’a’)와 (2,’b’),(3,’c’)로 묶여서 function에 들어가서 연산하여 결과를 도출

      2. ex) mapply(mean, iris[1:4]): 1부터 4열까지 한 열씩 평균을 구함

 

  1. base패키지가 기본이 됨

    1. summary(): generic function in r

      1. 인자가 자료일 땐 -> 통계값, 인자가 모델일 때 ->모델 요약

      2. 수치형 자료의 경우 quantile사용 가능

        1. ex) quantile(iris$Sepal.Length)

    2. order(): index를 output으로 내보냄

      1. 기본 패키지여서 자주사용

    3. sample(): 주어진 데이터에서 샘플 추출

      1. replace =TRUE 중복 허용

      2. sample(1:10,5,replace=T)

      3. 무작위로 데이터 뽑고 싶을 때 사용

        1. iris[sample(nrow(iris)),]: iris데이터를 무작위 index를 부여해 무작위로 뽑음

    4. split(데이터, 분리조건)

      1. ex) split(iris, iris$Species): 종을 기준으로 iris구분

        1. 반환값은 list - > lapply사용

 

  1. doBy 패키지

    1. summaryBy(): 특정 조건을 주어서 summary를 함

      1. ex) summaryBy(Sepal.Length + Sepal.width ~ Species, iris)

        1. +로 묶은건 열을 주는 것, Species는 행, iris는 데이터

    2. orderBy(): 특정 조건으로 ordering

      1. ex) orderBy(~Sepal.Width, iris)

        1. 모든 열을 볼것이기 때문에 공백 후, ~ Sepal.Width를 기준으로 정렬

        2. 이 때, Species에 의해 먼저 정렬 후, 정렬

    3. sampleBy()

      1. ex) sampleBy(~Species, frac=0.1, data=iris)

      2. 10%로씩 끊어서 추출



  1. subset(데이터, 조건, select=열선택)

    1. split()함수와 유사하지만 특정 조건의 것을 분류하는데 사용

      1. ex) subset(iris, Species ==’setosa’ & Sepal.Width > 5.0, select = c(Sepal.Width))

        1. select 조건을 걸면 그 조건에 해당하는 것만 보여줌

        2. 특정열을 제외하려면 select = -c(Sepal.Width)이런 식

  2. merge(): 두개의 공통된 프레임으로 데이터셋을 묶는 것

    1. ex) x<- data.frame(name =c(‘a’,’b’,’c’), math =c(20,30,40))

    2. ex) y<- data.frame(name =c(‘a’,’b’,’c’), english =c(20,30,40))

    3. ex) merge(x,y)

      1. 만약 한쪽 데이터의 갯수가 모자르면 all=TRUE로 설정

        1. 빈 데이터를 NA로 채움

    4. cbind()는 단순히 열을 합치는 것

  3. sort()/order()

    1. sort(): 값을 반환

    2. order(): index반환

  4. with()/within()

    1. with(): 데이터프레임의 열을 데이터프레임 이름 없이 접근하기 위함

      1. ex) with(iris, {print(Sepal.Width)})

    2. within(): 데이터를 수정할 때 사용, with와 비슷

      1. ex) within(x, ifelse(is.na(val),val <- median(val, rm.na =T),x))

      2. median(열, na값을 지움)

  5. attach()/detach(): with()와 within()함수랑 비슷, 아얘 불러놓고 쓰기

    1. ex) attach(iris)

    2. attach()하고 나서 데이터 프레임을 변경하면 detach()하고나서 변한 데이터가 적용되지 않음

  6. which(): 조건에 해당하는 위치 찾음

    1. ex) which(x%%2==0)

    2. ex) x[which(x%%2==0)]

      1. which.min(x), ex) x[which.min(x)]

      2. which.max(x)

  7. aggregate(formula, 데이터, 함수)

    1. ex) aggregate(Sepal.Length ~ Species, iris, mean)

  8. stack()/ unstack(): summaryBy()등을 사용하기 편치않은 데이터 구조를 바꿀 때

    1. x<- data.frame(medicine =c(‘a’,’b’,’c’), ctl = c(1,2,3), exp = c(2,3,4))

    2. stack(x)

    3. unstack(stacked_x, values~ind)

 

'R > 기초' 카테고리의 다른 글

R 새로운 종류의 Plot  (0) 2019.08.13
R 데이터 plot 함수  (0) 2019.08.13
R 데이터 조작 II  (0) 2019.08.13
R에서 사용하는 제어문, 함수, 그에따른 연산  (0) 2019.08.12
R에서 사용하는 변수  (0) 2019.08.12

+ Recent posts