R 할줄 R지? #9 - 파일 읽기 및 저장
- 프로그램언어/R
- 2020. 4. 29.
R에는 다양한 포맷의 파일들을 매우 쉽게 가져오는 기능을 제공하고 있다. 파일의 입출력 실습은 붓꽃(IRIS) 데이터를 기반으로 진행해보도록 한다.
아이리스 데이터
1,5.1,3.5,1.4,0.2,Iris-setosa
2,4.9,3,1.4,0.2,Iris-setosa
3,4.7,3.2,1.3,0.2,Iris-setosa
4,4.6,3.1,1.5,0.2,Iris-setosa
5,5,3.6,1.4,0.2,Iris-setosa
6,5.4,3.9,1.7,0.4,Iris-setosa
7,4.6,3.4,1.4,0.3,Iris-setosa
8,5,3.4,1.5,0.2,Iris-setosa
9,4.4,2.9,1.4,0.2,Iris-setosa
10,4.9,3.1,1.5,0.1,Iris-setosa
11,5.4,3.7,1.5,0.2,Iris-setosa
12,4.8,3.4,1.6,0.2,Iris-setosa
...
텍스트 파일 가져오기
우선 read.table() 함수를 사용하여 파일을 읽을 수 있다.
옵션
header : 첫번째 행이 헤더값(변수명)인지 아닌지를 판단한다. 1행이 변수명이면 header = TRUE
skip : 특정 행까지 제외하고 데이터를 가져온다 (5행부터 가져오려면 skip = 4)
nrows : 가져올 행의 개수 (총 5개의 행을 가져오려면 nrows=5)
sep : 데이터 구분자를 지정한다 (쉼표로 구분되었다면 sep = ",")
read.table
> iris <- read.table("E:/study/R/data/iris.csv")
> head(iris)
V1
1 1,5.1,3.5,1.4,0.2,Iris-setosa
2 2,4.9,3,1.4,0.2,Iris-setosa
3 3,4.7,3.2,1.3,0.2,Iris-setosa
4 4,4.6,3.1,1.5,0.2,Iris-setosa
5 5,5,3.6,1.4,0.2,Iris-setosa
6 6,5.4,3.9,1.7,0.4,Iris-setosa
아무런 옵션을 주지 않을 경우 다음과 같이 열이 한개로 데이터를 그냥 읽었다는 것을 알 수 있다. 즉 옵션을 주지 않으면 한줄을 통째로 읽는다
> iris <- read.table("E:/study/R/data/iris.csv", sep=",")
> head(iris)
V1 V2 V3 V4 V5 V6
1 1 5.1 3.5 1.4 0.2 Iris-setosa
2 2 4.9 3.0 1.4 0.2 Iris-setosa
3 3 4.7 3.2 1.3 0.2 Iris-setosa
4 4 4.6 3.1 1.5 0.2 Iris-setosa
5 5 5.0 3.6 1.4 0.2 Iris-setosa
6 6 5.4 3.9 1.7 0.4 Iris-setosa
sep="," 옵션을 주니, 이제 총 6개의 열을 만들어서 데이터를 읽어들였다.
> iris <- read.table("E:/study/R/data/iris.csv", sep=",", skip=2, nrows=5)
> iris
V1 V2 V3 V4 V5 V6
1 3 4.7 3.2 1.3 0.2 Iris-setosa
2 4 4.6 3.1 1.5 0.2 Iris-setosa
3 5 5.0 3.6 1.4 0.2 Iris-setosa
4 6 5.4 3.9 1.7 0.4 Iris-setosa
5 7 4.6 3.4 1.4 0.3 Iris-setosa
2행까지 무시를 하고, 총 5개의 행을 가져오라는 명령을 주었다. 원본 데이터 기준으로 3행부터 7행까지 데이터를 가져온 것을 확인할 수 있다.
read.csv
read.table과 유사하지만, csv라는 함수로도 비슷한 업무를 수행한다
> iris <- read.csv("E:/study/R/data/iris.csv")
> head(iris)
X1 X5.1 X3.5 X1.4 X0.2 Iris.setosa
1 2 4.9 3.0 1.4 0.2 Iris-setosa
2 3 4.7 3.2 1.3 0.2 Iris-setosa
3 4 4.6 3.1 1.5 0.2 Iris-setosa
4 5 5.0 3.6 1.4 0.2 Iris-setosa
5 6 5.4 3.9 1.7 0.4 Iris-setosa
6 7 4.6 3.4 1.4 0.3 Iris-setosa
별다른 인수값을 주지 않은 상태로 호출 했을 때, 첫번째 행을 header로 잡아버린다. read.table과 다르게 콤마를 자동으로 구분자값으로 인식을 하였다.
> iris <- read.csv("E:/study/R/data/iris.csv", header=F)
> head(iris)
V1 V2 V3 V4 V5 V6
1 1 5.1 3.5 1.4 0.2 Iris-setosa
2 2 4.9 3.0 1.4 0.2 Iris-setosa
3 3 4.7 3.2 1.3 0.2 Iris-setosa
4 4 4.6 3.1 1.5 0.2 Iris-setosa
5 5 5.0 3.6 1.4 0.2 Iris-setosa
6 6 5.4 3.9 1.7 0.4 Iris-setosa
header=F를 추가하여 첫번째 행을 header로 인식하지 않고 데이터로 인식을 시켰다. 즉 header의 default 값은 T라는 것을 알 수 있다.
파일 저장하기
iris의 데이터를 읽은 후, iris2.csv로 저장(쓰기)하는 간단한 실습을 해보도록 한다
write.table
> iris <- read.csv("E:/study/R/data/iris.csv", header=F)
> write.table(iris, "E:/study/R/data/iris2.csv")
해당 위치에 iris2.csv 파일이 생성된 것을 확인할 수 있으며 파일을 열면
다음과 같이 데이터가 들어갔으나, 일부 데이터에 더블쿼테이션이 감싸고 있고, 구분자가 공백으로 되어 있는 것을 확인할 수 있다. 더블쿼테이션을 없애고, 구분자를 콤마(,)로 변경하고 싶으면 2개의 인자값을 추가한다
> write.table(iris, "E:/study/R/data/iris2.csv", quote=F, sep=",")
quote는 문자형 데이터에 쌍따옴표를 추가할지를 결정하고, sep은 구분자 값을 어떤 문자열로 할 지 선택한다.
write.csv
write.csv(iris, "E:/study/R/data/iris3.csv")
write.csv를 사용하면 파일을 기본적으로 CSV 포맷 기반으로 저장할 수 있다.
csv기반으로 저장할 경우 table 방식과 차이점은 구분자값이 공백이 아니라 쉼표라는 것이다. 여기에 추가적으로 더블쿼테이션을 삭제해보도록 한다
write.csv(iris, "E:/study/R/data/iris3.csv", quote=F)
quote=F 인자값을 추가로 넣으면 다음과 같이 더블쿼테이션이 빠진 것을 확인할 수 있다.
'프로그램언어 > R' 카테고리의 다른 글
R 할줄 R지? #10 - 데이터 정렬하기 (0) | 2020.05.22 |
---|---|
R 버전 업그레이드하기 (0) | 2020.05.14 |
R 할줄 R지? #8 - IRIS로 데이터 프레임 다뤄보기 (0) | 2020.03.04 |
R 할줄 R지? #7 - 2차원 다루기, 데이터프레임(Data Frame) (0) | 2020.02.18 |
R 할줄 R지? #6 - 2차원 다루기, 매트릭스(Matrix) (0) | 2020.01.26 |