728x90

R은 통계프로그래밍 언어로 일반인이 사용하기 쉽게 만든 언어이다.

그러나 필자는 프로그래머이고 비 프로그래머의 인식으로 접근하기 힘든면이 있다.

강의 또한 그러하다. 강의 곳곳에 프로그래머적인 시선이 들어있으니 참고하여 필요없으면 넘겨라.


참고:

[개발환경 셋팅하기]R설치 및 환경변수 등록-(1)

[개발환경 셋팅하기]RStudio설치-(2)

[개발환경 셋팅하기]RStudio프로젝트 만들기-(3)


csv파일을 읽고 쓰는것은 매우 중요하다.

xls파일이나 txt파일들도 자주 읽게 되겠지만 csv를 가장 자주 사용하게 될것이다.

흔히 csv를 엑셀파일로 잘못 알고 있는 사람이 많다.

자꾸 csv파일을 보더니 친구가 어? 엑셀파일이네.라고 이야기를 한다.

csv는 Comma Seperate Value의 줄임말로 말그도래 쉼표로 구분된 데이터라는 뜻이다.

엑셀이라는 프로그램이 등장하기 전부터 있던 역사가 오래된 데이터타입이다.

심지어 그냥 텍스트로 만드는것도 쉽다. 어쨋던 csv파일은 데이터를 저장하는 쉬운 방법이므로 자주 읽게 될것이다.


print(setwd('/Users/jiharu/Desktop/WorkSpace/RStudioWorkSpace/Test1'))

fileCSV <- read.csv("2016년_사고유형별_월별_교통사고통계_20161019.csv")


print(fileCSV)


읽으면 앞의 xlsx때와 마찬가지로 데이터 프레임으로 나와서 데이터를 가공하기 쉽게 나온다.

게다가 csv파일은 특성상 저장할때 특유의 데코레이션?을 거치지 않으므로 사용하기도 쉽다.

읽게되면 아래와 같이 나온다.


읽게 되면 이제 데이터가 나오는데 저번의 xlsx때처럼 데이터의 헤더(속성)명에 숫자앞에X가 붙어서 나온다.

이를 없에주려면 코드를 좀 적어야하는데 저걸 없애는 기본설정이 있는지 없는지를 잘 모르겠다.

어쨋던 없애려면 아래와같이 코드를 짜야한다.


print(setwd('/Users/jiharu/Desktop/WorkSpace/RStudioWorkSpace/Test1'))

fileCSV <- read.csv("2016년_사고유형별_월별_교통사고통계_20161019.csv")

i<-1

newName <- c()

for(colName in names(fileCSV)){

  check <- grep("X+",colName)

  if(!is.na(check[1])){

    if(check==TRUE){

      newName[i] <- substr(colName,2,nchar(colName))

      i<-i+1

    }

  }else{

    newName[i] <- colName

    i<-i+1

  }

}

names(fileCSV)<-newName

print(fileCSV)


names는 데이터의 속성만 추출하게된다. 리스트나 데이터프레임(베이스가 리스트)의 속성을 추려낸다.

그후 규식을 사용하는 grep을 사용해서 데이터를 추출하면 해당데이터는 1차원의 벡터로 값이 나오게된다.

따라서 값이 하나밖에 없으므로 벡터의 첫번째 원소를 출력해서(어짜피 하나밖에 없다.)그게 NA인지 비교한다.

NA에 대해서 이야기한적이 없는데 NA는 빈 데이터형을 의미한다.

예를들면 위의 newName은 생성은 했는데 비어있는 벡터이므로 빈벡터로 NA이다.

NA라면 어짜피 아무것도 해줄 필요 없으므로 그냥 newName이라는 벡터에 넣어둔다.

그게 아니라면 맨앞의 X를제거하면된다. 그때 사용하는게 substr인데 substr함수는 문자열을 자르는 함수

2번부터 끝까지 짜르면된다. nchar는 문자열의 길이를 출력하는 함수이다.

그렇게 해서 새로운 벡터 newName을 완성시키고 기존의 파일에 대체하면된다.

그런데 당분간은 삭제하지 않는게 좋다. 삭제는 저장하기 마지막에 하라.

그 이유는 속성명은 숫자로 시작할 수 없기에 문법정인 에러가 일어나기 때문이다.


일단 값을 읽는데 까지는 성공하였다. 이제 값을 한번 써보자.

값을 쓰는 방법은 어찌보면 쉬운데 그냥 데이터프레임의 값을 더해주면되는 것이다.


print(setwd('/Users/jiharu/Desktop/WorkSpace/RStudioWorkSpace/Test1'))

fileCSV <- read.csv("2016년_사고유형별_월별_교통사고통계_20161019.csv")

i<-1

newName <- c()

for(colName in names(fileCSV)){

  check <- grep("X+",colName)

  if(!is.na(check[1])){

    if(check==TRUE){

      newName[i] <- substr(colName,2,nchar(colName))

      i<-i+1

    }

  }else{

    newName[i] <- colName

    i<-i+1

  }

}


exList<-list('건널목','기타',1,2,3,4,5,6,7,8,9,10,11,12)

newFile<-rbind(fileCSV,exList)

names(newFile)<-newName

write.csv(newFile,"2016년_사고유형별_월별_교통사고통계_20161019_add.csv")


건널목과 기타는 해당행이 factor형이기 때문에 기존에 있는데이터중에서 선택해야한다.

factor형에 대한설명은 다음에 하도록하자.

이제 출력을해서 결과를 확인하자.



csv파일을 읽기위한 전용라이브러리가 있다. 개인적으론 이게 제일 편한것 같은데 설치를 해야한다.

사용법은 아래와 같고 이름은 readr이다.


library(readr)

dataset <- read_csv("catalog.csv", col_names = FALSE)

View(dataset)


'Programming > R' 카테고리의 다른 글

[R-17]파일 읽기,쓰기(json)  (0) 2017.11.19
[R-16]파일 읽기(xml)  (0) 2017.11.19
[R-14]파일 읽기(xls,xlsx)  (0) 2017.11.19
[R-13]현재작업 디렉터리, 파일 저장, 읽기(txt)  (0) 2017.11.19
[R-12]사용자로부터 입력받기  (0) 2017.11.18

+ Recent posts