'R 데이터 편집창'에 해당되는 글 1건

  1. 2015.07.11 R 데이터 편집기 edit(), 외부 파일 데이터 불러오기 read.table() (3)

R에서 데이터를 c() 함수로 직접 입력하는 방법은 지난 포스팅에서 알아보았습니다. 

 

이 외에도

 

(1) edit() 함수를 이용해 엑셀 처럼 그리드 창에 직접 입력하는 방법과,

 

(2) 외부에서 txt나 csv, 엑셀 파일 등을 직접 불러오는 방법도 있습니다. 



(1) R 데이터 편집기 edit() 


엑셀 처럼 생긴 데이터 편집기 창을 사용하려면 edit() 함수를 이용하며, 데이터 프레임 구조로 저장됩니다. 

비교적 소규모의 데이터를 입력하기에는 써볼만 하겠지만, 대용량 데이터를 입력해야 하는 거라면 좀 무리겠지요? 


## 데이터 입력창 edit() 

> d.f <- data.frame()  # 데이터 프레임을 먼저 생성해 주고 나서, 

> d.f <- edit(d.f)  # 데이터 편집기 창 불러오기



edit() 함수로 데이터 편집기를 호출하면 아래와 같은 창이 뜹니다. 



'var1', 'var2', ....  부분을 클릭하면 '변수 편집기' 창이 팝업되며, '변수명'과 '유형(numeric, character)'을 편집할 수 있습니다. 




2. 외부 파일 데이터 불러오기  read.table() 


다수의 변수에 대해 다수의 관찰값이 2차원 형태로 구성된 데이터 파일을 불러오는데 read.table() 함수를 사용합니다. 


아래와 같은 데이터셋이 있습니다.

 


dataset_1.txt




> ## 외부 데이터셋 파일 불러오기

> dataset_1 <- read.table("C:/Users/user/Documents/R/dataset_1.txt", 

+                         header = TRUE,  # 변수명

+                         sep = ",",  # 구분자

+                         stringsAsFactor = FALSE, # 문자형 데이터를 요인으로 인식할지 여부

+                         na.strings = ""  # 결측값 표시

+                         ) 


  • '#' 은 R이 인식하지 않으므로 '#' 기호를 활용해 데이터셋에 대한 부가적인 설명을 덧붙여 놓을 수 있음

  • 파일 경로 입력할때는 Windows 탐색기 경로 구분자 '\' 가 아니라 '/' 로 반대 방향임을 주의 

  • 구분자 sep에는 콤마 ",", 빈칸 " ", ":", tap (sep = "\t") 등이 있음

  • stringsAsFactor = TRUE 하면 문자형 데이터를 요인(factor)으로 인식함. 요인으로 불러오는게 맞는지 아닌지 확인 필요

  • na.strings = "", ".", "NA" 등이 있음

  • 'csv' 파일은 read.csv() 함수를 사용. read.table() 함수와 다른 점은, read.csv()함수는 sep="," 옵션이 필요 없다는 점과 파일명 끝이 "dataset_name.cvs"로 끝난다는 점. csv 파일이 'comma separated values'의 약자로서 콤마로 구분자가 되어 있기 때문임. 


RStudio 의 우측 상단 'Environment' 메뉴에 보면 'dataset_1' 데이터 프레임이 생겼음을 확인할 수 있으며, 이를 클릭 시 왼쪽 상단에 'dataset_1' 이름으로 데이터셋 보기 화면이 열린다. 




엑셀, SAS, SPSS, 인터넷 홈페이지에서 불러오는 패키지가 있기는 합니다만 비추천하므로 포스팅은 생략합니다. 

엑셀은 sheet가 나뉘어져 있을 수도 있고 매크로 등의 함수가 걸려있을 수도 있어서 오류 여지가 있기에 엑셀 파일을 R로 불러오기 하는 것은 비추천합니다. SAS나 SPSS 파일을 불러오는 패키지도 버전 오류 여지가 있기에 비추천합니다. 홈페이지 URL도 언제 어떻게 바뀔지, 언제 없어질지 모르므로 비추천합니다. 

(엑셀 파일 불러오기 참고 ☞ http://rfriend.tistory.com/313 )


그냥 맘편하게, 확실하고 정확하게, txt나 csv 파일로 내려서 파일 불러오기 read.table() 함수 사용하시는걸 추천합니다. 

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^

 

Posted by R Friend R_Friend

댓글을 달아 주세요

  1. 잘보고있습니다 2018.03.26 19:49  댓글주소  수정/삭제  댓글쓰기

    하나하나 따라가면서 공부하고 있습니다.
    좋은 글 정말 감사드립니다.

    한가지 궁금한 점이 있어 댓글 남깁니다.
    read.table을 쓰다가, 많은 양의 데이터를 불러오니
    계속 멈춰서 고생했는데
    read.csv로는 불러와지더라구요.
    저만 겪은 일인건지, 아니면..
    두 기능에 차이가 있어서 그런건지 여쭤봅니다.

    감사합니다!





    • R Friend R_Friend 2018.03.26 22:09 신고  댓글주소  수정/삭제

      안녕하세요.

      (1) read.table()을 가져다가 디폴트 옵션을 일부 다르게 적용해서 쓰는게 read.csv() 인 것으로 알고 있습니다. 다만 read.table() 의 경우 메모리 사용에 일부 문제가 있어서 다양한 변수를 가지고 있는 대용량 데이터에 대해서는 부적절하다는 설명이 있습니다. 아래는 도움말에 나오는 메모리 사용 관련 내용입니다.

      > ?read.table()

      [ Memory usage ]

      These functions can use a surprising amount of memory when reading large files. There is extensive discussion in the ‘R Data Import/Export’ manual, supplementing the notes here.
      Less memory will be used if colClasses is specified as one of the six atomic vector classes. This can be particularly so when reading a column that takes many distinct numeric values, as storing each distinct value as a character string can take up to 14 times as much memory as storing it as an integer.
      Using nrows, even as a mild over-estimate, will help memory usage.
      Using comment.char = "" will be appreciably faster than the read.table default.
      read.table is not the right tool for reading large matrices, especially those with many columns: it is designed to read data frames which may have columns of very different classes. Use scan instead for matrices.


      (2) 대용량 데이터를 빠르게 읽어들이는데는 data.table 패키지의 fread() 함수를 사용해보시기 바랍니다. 훨~씬 빠릅니다. 아래 링크 참고하세요.
      ==> http://rfriend.tistory.com/337


      (3) 물론 (회사나 학교에서 여건이 허락한다면...) 대용량 데이터를 하둡이나 MPP(Massively Parallel Processing) DB (예: Pivotal의 GPDB) 에서 일단 전처리를 한 후에 요약데이터나 샘플링 데이터를 R이나 Python으로 가져와서 분석하시는 것을 권장합니다. (<- 제가 회사에서 하는 방법)

  2. 잘보고있습니다 2018.03.27 17:50  댓글주소  수정/삭제  댓글쓰기

    정말 친절하십니다.
    도움이 많이 되었습니다.
    감사합니다!!