본문 바로가기
R/Data Type

R 데이터프레임 DataFrame - 생성과 저장 text/csv/excel파일

by 통계열등생 2020. 10. 19.
반응형

데이터 프레임은 데이터를 엑셀(Excel)처럼 표의 형태로 저장하는 자료구조이다.

칼럼(열) 단위로 서로 다른 자료형을 갖는 데이터를 저장할 수 있고, R에서 가장 중요한 데이터 타입이다.

 

 

 

 ◎ 데이터프레임 생성

 

  • data.frame()
data.frame( value, row.names=NULL, check.rows=FALSE, check.names=TRUE, fix.empty.names=TRUE, stringsAsFactors=default.stringsAsFactors() )

<인수설명>

row.names 행 이름
check.rows 행 이름의 길이와 일관성을 검사
check.names 변수 이름이 구문적으로 유효한지 검사
fix.empty.names 이름이 없을 경우 자동으로 이름을 생성
stringsAsFactors 문자열 데이터를 TRUE는 요인형으로, FALSE는 문자형 그대로 저장

 

> name = c('홍길동','이순신','유관순')
> kor = c(90, 85, 77)
> mat = c(79, 83, 94)
> eng = c(81, 92, 85)
> grade = data.frame('이름'=name,'국어'=kor,'수학'=mat,'영어'=eng)
> dim(grade)
[1] 3 4
> grade
    이름 국어 수학 영어
1 홍길동   90   79   81
2 이순신   85   83   92
3 유관순   77   94   85

객체 앞에 큰따옴표 or 작은따옴표로 칼럼의 이름을 각각 지정해줄 수 있다.

 

 

  • text 파일
> setwd('E:/Tistory/data')
> getwd()
[1] "E:/Tistory/data"
> write.table(grade, 'grade.txt', quote=F, row.names=F)

먼저 성적 데이터를 text 파일로 저장한 후 다시 text 파일을 불러와 보려고 한다.

setwd() 함수는 워킹디렉토리를 지정해주고, getwd() 함수는 워킹디렉토리를 출력해준다.

데이터를 저장할 폴터를 워킹디렉토리로 지정해주었고, write.table() 함수로 데이터를 저장하였다.

quote=F 인수는 문자열에 따옴표를 하지 않겠다는 것이고, 

row.names=F 인수는 행 이름을 저장하지 않겠다는 것이다.

 

> write.table(grade, 'E:/Tistory/data/grade.txt', quote=F, row.names=F)

만약 워킹디렉토리를 바꾸지않고 파일을 저장하고싶다면 "폴더경로/파일이름.확장자" 로 인수를 바꿔주면 된다.

 

이 파일을 이제 불러와보겠다.

> grade_txt = read.table('grade.txt', header=T)
> grade_txt
    이름 국어 수학 영어
1 홍길동   90   79   81
2 이순신   85   83   92
3 유관순   77   94   85

만약 한글이 깨진다면 read.table() 함수의 인수에 encoding="utf-8" 을 추가해주면 한글이 정상적으로 출력된다.

 

 

  • csv 파일
> write.csv(grade, 'grade.csv', row.names=F)

csv 파일은 각 데이터를 콤마로 구분하며 저장하는 파일이다.

csv 파일을 저장할땐 write.csv() 함수를 사용한다.

 

> grade_csv = read.csv('grade.csv', header=T)
> grade_csv
    이름 국어 수학 영어
1 홍길동   90   79   81
2 이순신   85   83   92
3 유관순   77   94   85

 

 

  • excel 파일

엑셀파일을 read.csv() or read.table()로 불러올 경우 콤마(,)를 잘못 인식해 데이터를 제대로 불러올 수 없는 경우가 있다.

excel 파일을 저장하고 불러오려면 패키지(package)를 install.packages() 함수로 다운받고, library() 함수로 라이브러리 상에 올려야 한다.

 

> install.packages('openxlsx')
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:

https://cran.rstudio.com/bin/windows/Rtools/
Installing package into ‘C:/Users/small22/Documents/R/win-library/4.0’
(as ‘lib’ is unspecified)
URL 'https://cran.rstudio.com/bin/windows/contrib/4.0/openxlsx_4.2.2.zip'을 시도합니다
Content type 'application/zip' length 2758254 bytes (2.6 MB)
downloaded 2.6 MB

package ‘openxlsx’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\Public\Documents\ESTsoft\CreatorTemp\Rtmp2n3hLO\downloaded_packages
> library(openxlsx)
> write.xlsx(grade, 'grade.xlsx') 

"openxlsx" 라는 패키지를 다운받았고, 저장한 파일의 결과이다.

 

> grade_xlsx = read.xlsx('grade.xlsx')
> grade_xlsx
    이름 국어 수학 영어
1 홍길동   90   79   81
2 이순신   85   83   92
3 유관순   77   94   85

만약 엑셀의 두번째 sheet를 불러오고 싶다면

read.xlsx('grade.xlsx', 2) -> 이렇게 인수로 2를 넣어주면 된다.

 

> install.packages('readxl')
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:

https://cran.rstudio.com/bin/windows/Rtools/
Installing package into ‘C:/Users/small22/Documents/R/win-library/4.0’
(as ‘lib’ is unspecified)
URL 'https://cran.rstudio.com/bin/windows/contrib/4.0/readxl_1.3.1.zip'을 시도합니다
Content type 'application/zip' length 1708931 bytes (1.6 MB)
downloaded 1.6 MB

package ‘readxl’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\Public\Documents\ESTsoft\CreatorTemp\Rtmp2n3hLO\downloaded_packages
> library(readxl)
>
> grade_xlsx2 = read_excel('grade.xlsx')
> grade_xlsx2
# A tibble: 3 x 4
  이름    국어  수학  영어
  <chr>  <dbl> <dbl> <dbl>
1 홍길동    90    79    81
2 이순신    85    83    92
3 유관순    77    94    85
> str(grade_xlsx2)
tibble [3 x 4] (S3: tbl_df/tbl/data.frame)
 $ 이름: chr [1:3] "홍길동" "이순신" "유관순"
 $ 국어: num [1:3] 90 85 77
 $ 수학: num [1:3] 79 83 94
 $ 영어: num [1:3] 81 92 85

엑셀을 읽어올 수 있는 패키지로 "readxl" 이 있다.

하지만 읽어온 결과를 보면 데이터프레임이 아닌 티블(tibble) 구조이다.

티블은 사실 데이터프레임의 하나의 유형으로 볼 수 있는데 불편한 사항들을 수정해서 나온 데이터 타입이다.

대용량 데이터를 다루는데 용이하다고 한다.

 

 

※ R 데이터프레임 DataFrame 다음내용

small22.tistory.com/14

 

R 데이터프레임 DataFrame - 인덱싱/관련함수

 ◎ 데이터프레임 인덱싱(indexing) > number = 1:10 > score = c(90,85,83,75,63,55,97,80,77,59) > gender = c('M','F','M','M','F','M','M','F','F','M') > student = data.frame(number, score, gender) > pr..

small22.tistory.com

 

 

 

 

 

<R 데이터프레임 DataFrame - 생성과 저장 text/csv/excel파일>

반응형

댓글