13.2 데이터 저장하기

R 에서 처리한 개체를 다양한 형식으로 내보내 저장할 수 있습니다. SPSS, SAS 및 Stata의 경우에는 별도의 패키지를 사용해야 합니다. 그리고 Excel의 경우는 xlsx 패키지가 필요합니다.

13.2.1 R 형식으로 저장하기

R에서는 처리한 데이터를 R 고유의 데이터 형식으로 저장할 수 있습니다. 대표적인 형식이 .rds.Rdata (또는 .rda) 형식입니다.

이러한 형식으로 데이터를 저장하는 것은 많은 장점이 있습니다.

  • 데이터를 R로 복원하는 것이 더 빠릅니다.
  • 데이터에 인코딩된 R 고유의 정보들(예 : 속성, 변수 유형 등)을 그대로 유지해 줍니다.

saveRDS() 함수와 readRDS() 함수는 단일 R 개체 만 처리합니다. 그러나 불러들인 개체의 개체 이름이 개체가 저장될 때의 개체 이름과 같을 필요가 없다는 점에서 다중 개체 저장 방식보다 더 유연합니다.

예를 들어 앞의 예에서 전국 대학도서관정보 파일에서 불러온 mydata 개체를 .rds 형식의 파일로 저장해 보겠습니다.

## mydata 데이터 세트를 data_output 폴더에 univ_library.rds 파일로 저장합니다.
saveRDS(mydata, "data_output/univ_library.rds")

# 저장된 iris.rds 파일을 다시 불러들입니다.
univ.libr <- readRDS("data_output/univ_library.rds")
str(univ.libr)
## 'data.frame':    1834 obs. of  9 variables:
##  $ 평가년도  : int  2014 2014 2014 2014 2014 2014 2014 2014 2014 2014 ...
##  $ 도서관구분: chr  "LIBTYPE008" "LIBTYPE008" "LIBTYPE008" "LIBTYPE008" ...
##  $ 도서관코드: int  227 25 269 290 311 340 363 387 408 43 ...
##  $ 면적      : chr  "경북" "대전" "경기" "서울" ...
##  $ 시군구    : chr  "영천시" "서구" "여주시" "종로구" ...
##  $ 장서수    : int  20827 31054 114815 6326 756633 1306474 1611325 136147 4421 1379785 ...
##  $ 사서수    : int  1 1 2 1 6 11 30 2 0 20 ...
##  $ 대출권수  : int  2044 15745 10677 4647 53358 303522 187458 26534 495 123313 ...
##  $ 예산액    : num  3.44e+07 0.00 3.80e+07 7.50e+06 1.05e+08 ...

한편 복수의 개체들을 저장하기 위해서는 save() 함수를 사용하며, 그 결과는 .Rdata 형식으로 저장됩니다.

예를 들어, 전국 대학도서관정보인 mydatamydata1 등의 2개의 개체를 library.Rdata라는 파일로 저장해 보겠습니다.

## mydata와 mydata1 두 개의 데이터 세트를 저장합니다.
save(mydata, mydata1,                        # 저장할 개체를 지정합니다.
     file = "data_output/library.Rdata")     # 저장할 Rdata의 경로와 파일명을 지정합니다.

## 저장된 Rdata 파일은 load() 함수로 불러옵니다.
load("data_output/library.Rdata")            # 변수에 할당할 필요가 없습니다.

load()함수의 경우에는 Rdata에 저장되어 있는 개체들의 이름을 그대로 불러오게 됩니다.

13.2.2 CSV로 저장하기

R에서 처리한 개체를 write.csv() 함수 또는 write.table() 함수를 이용하여 csv 파일로 저장할 수 있습니다.

write.csv() 함수의 형식은 다음가 같습니다.

write.csv(x, file = “”, row.names = TRUE)

  • x : 파일에 저장할 데이터 프레임 또는 행렬 등의 개체입니다.
  • file="" : 데이터를 저장할 경로와 파일명입니다.
  • row.names=TRUE : TRUE면 행 이름을 CSV 파일에 포함시켜 저장합니다.

앞에서 mydata 개체를 write.csv() 함수를 이용하여 mydata.csv로 저장해 보겠습니다.

예를 들어, 전국대학교 도서관정보를 담고 있는 mydata 개체를 저장해 보겠습니다. 그런데 이 개체에는 한글이 있기 때문에 fileEncoding = 인수에 “UTF-8”을 입력해 줘야 합니다.

## mydata 개체를 mydata.csv로 저장합니다.
write.csv(mydata, "data_output/mydata.csv",
          fileEncoding = "UTF-8")                # 한글 코딩을 설정합니다.

## 또는 write.table() 함수를 이용할 수도 있습니다.
write.table(mydata, "data_output/mydataTable.csv",
            fileEncoding = "UTF-8")              # 한글 코딩을 설정합니다.

## 데이터 항목의 구분자를 설정할 수도 있습니다.
write.table(mydata, "data_output/mydataTable.csv",
            sep = "\t",                          # 구분자로 탭문자(\t)를 설정합니다.
            fileEncoding = "UTF-8")              # 한글 코딩을 설정합니다.

13.2.3 엑셀 시트로 저장하기

xlsx 패키지의 write.xlsx() 함수를 이용하면 R의 개체를 Excel 시트로도 저장할 수 있습니다.

예를 들어, mydata 개체를 mydata.xlsx 파일로 저장해 보겠습니다.

## mydata 개체를 mydata.xlsx 파일로 저장합니다.
# install.packages("xlsx")
library(xlsx)

write.xlsx(mydata, "data_output/mydata.xlsx")    # 특별히 한글코드를 지정할 필요가 없습니다.

엑셀 파일로 저장하는데 시간이 걸리는 것을 느낄 수 있습니다.

13.2.4 기타 형식으로 저장하기

SPSS, SAS, Stata 형식으로도 저장할 수 있습니다.

다음의 예를 참고하기 바랍니다. mydata 개체를 저장해 보겠습니다.

## SPSS로 저장합니다.
library(foreign)
write.foreign(mydata, 
              "c:/mydata.txt", "c:/mydata.sps",
              package = "SPSS")

## SAS로 저장합니다.
library(foreign)
write.foreign(mydata, 
              "c:/mydata.txt", "c:/mydata.sas",   
              package="SAS")

## Stata로 저장합니다.
library(foreign)
write.dta(mydata, "c:/mydata.dta")