워라밸 중독자

[R] 데이터프레임 쓰기 및 읽기 - read.table(), write.table() 본문

코딩, 딱 지금이 시작할때! (코딱지)

[R] 데이터프레임 쓰기 및 읽기 - read.table(), write.table()

Ufungi 2023. 1. 7. 14:34

데이터프레임 읽기 및 쓰기

보통 다루게 되는 데이터프레임 파일은 csv, tsv, txt 정도이고, 엑셀 파일을 쓰거나 읽을 일은 거의 없다.

데이터프레임은 write.csv(), write.table()를 이용해 내보내거나 read.csv(), read.table()을 이용해 불러오게 되는데, 여기서는. csv() 나. table()이나 큰 차이 없으므로. csv() 함수들은 제외했다.

데이터프레임 읽기

read.table()

이 함수는 다음과 같이 사용하여 파일을 불러온다.

 

read.table(file, sep, header, row.names, stringsAsFactors, encoding)

 

  • file: 불러올 파일의 이름 또는 경로 (하위 디렉토리를 표시할 땐 슬래쉬 /  를 쓴다)
  • sep: 텍스트 구분 기호. csv 파일일 경우 sep = ",", txt 또는 tsv 파일일 경우 sep = "\t"
  • header: 첫 행을 열 이름으로 쓸 경우 header = T
  • row.names: 첫 열을 행 이름으로 쓸 경우 row.names = 1
  • stringsAsFactors: 문자열을 factor로 불러올 것인지? character로 불러올 경우 stringsAsFactors = F
    * 데이터를 불러오게 되면 기본적으로 문자열은 factor로 불러오게 되는데, factor는 연산이 불가능하므로  stringsAsFactors = F 를 써야 한다.
  • encoding: 한글이 포함된 파일을 불러올 때 한글이 깨질 경우 encoding = "UTF-8" 또는 encoding = "cp949" 

file은 다음 세 가지 방법으로 지정할 수 있다.

# working directory 지정 후 파일 불러오기
> setwd("C:/파일 위치")
> x <- read.table("file.csv", sep = ",")

# 파일의 절대 경로로 불러오기
> x <- read.table("C:/파일 위치/file.csv", sep = ",")

# 파일 탐색기를 열어서 직접 불러오기
> x <- read.table(file.choose(), sep = ",")

# 결과 확인
> x
  X V1 V2 V3 V4 V5 V6
1 A  1  6 11 16 21 26
2 B  2  7 12 17 22 27
3 C  3  8 13 18 23 28
4 D  4  9 14 19 24 29
5 E  5 10 15 20 25 30
> class(x)
[1] "data.frame" # 데이터 프레임으로 불러오게된다.

일반적으로 열과 행 이름이 모두 있는 경우 다음의 매개변수 설정을 쓴다.

> read.table("C:/파일 위치/file.csv", sep = ",", header = T, row.names = 1, stringsAsFactors = F)
  V1 V2 V3 V4 V5 V6
A  1  6 11 16 21 26
B  2  7 12 17 22 27
C  3  8 13 18 23 28
D  4  9 14 19 24 29
E  5 10 15 20 25 30

Tab으로 구분된 tsv 또는 txt 파일을 불러올 경우

# sep 매개변수 설정하지 않고 tsv 파일을 불러올 경우 망한다.
> read.table("C:/파일 위치/file.tsv", header = T)
         V1.V2.V3.V4.V5.V6
1  A\t1\t6\t11\t16\t21\t26
2  B\t2\t7\t12\t17\t22\t27
3  C\t3\t8\t13\t18\t23\t28
4  D\t4\t9\t14\t19\t24\t29
5 E\t5\t10\t15\t20\t25\t30

# sep = "\t"로 설정하여 tsv 파일을 불러올 경우
> read.table("C:/파일 위치/file.tsv", sep = "\t", header = T, row.names = 1, stringsAsFactors = F)
  V1 V2 V3 V4 V5 V6
A  1  6 11 16 21 26
B  2  7 12 17 22 27
C  3  8 13 18 23 28
D  4  9 14 19 24 29
E  5 10 15 20 25 30

데이터프레임 쓰기

write.table()

이 함수는 다음과 같이 사용하여 객체를 파일로 내보낸다.

 

write.table(x, file, sep, col.names, row.names, quote)

 

  • x: 저장할 대상, 객체 
  • file: 객체가 저장될 파일의 이름 또는 경로
  • sep: 텍스트 구분 기호. csv 파일일 경우 sep = ",", txt 또는 tsv 파일일 경우 sep = "\t"
  • col.names: 첫 행을 열 이름으로 쓸 경우 col.names = T
  • row.names: 첫 열을 행 이름으로 쓸 경우 row.names = T
  • quote: 변수명과 문자열에 따옴표를 붙일지 결정. 따옴표 없이 쓸 경우 quote  = F

일단 아래와 같이 데이터프레임을 하나 만들어보자.

> mat <- matrix(1:30, nrow = 5)
> df <- data.frame(mat, row.names = c("A","B","C","D","E"))
> df
  X1 X2 X3 X4 X5 X6
A  1  6 11 16 21 26
B  2  7 12 17 22 27
C  3  8 13 18 23 28
D  4  9 14 19 24 29
E  5 10 15 20 25 30

일반적으로 열과 행 이름이 모두 있는 경우 다음의 매개변수 설정을 쓴다.

# df를 저장하기
write.table(df, "file.csv", sep = ",",  col.names = T, row.names = T, quote = F)