데이터 프레임은 데이터를 엑셀(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 다음내용
<R 데이터프레임 DataFrame - 생성과 저장 text/csv/excel파일>
'R > Data Type' 카테고리의 다른 글
R 자료형/자료구조 - 판별과 변환 (0) | 2020.10.26 |
---|---|
R 데이터프레임 DataFrame - 인덱싱/관련함수 (0) | 2020.10.26 |
R 배열 Array - 생성/인덱싱 (0) | 2020.10.16 |
R 행렬 Matrix - 생성/연산/인덱싱 (0) | 2020.10.14 |
R 리스트 List - 생성/관련함수/인덱싱 (0) | 2020.08.11 |
댓글