R을 처음 시작하면 사실 가장 쉬우면서도 까다로운 것이 다른 파일을 불러오는 것이라고 생각합니다.

R은 대/소문자를 구분하며, 그에 따른 정확한 함수명과 패키지명, 파일명을 입력하는 것이 매우 중요합니다.

 

우리가 프로그래밍을 하면서 자주 사용하게 되는 txt, xlsx, csv등의 데이터 파일을 불러오는 방법을 알아봅시닷.

우선 오늘은 txt파일을 불러오는 방법부터 보겠습니다.

 

6명의 수학점수가 나와있는 간단한 txt 데이터를 이용해 보겠습니다.

맨 위에 변수명이 있고, 공백으로 띄워져 있네요.

txt데이터를 불러올 때는 R에서 내장되어 있는 함수인 read.table()을 활용합니다.

read.table(file, header = FALSE, sep = "", quote = "\"'", dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"), row.names, col.names, as.is = !stringsAsFactors, na.strings = "NA", colClasses = NA, nrows = -1, skip = 0, check.names = TRUE, fill = !blank.lines.skip, strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#", allowEscapes = FALSE, flush = FALSE, stringsAsFactors = default.stringsAsFactors(), fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)

이 데이터를 들고 오기 위해서는 우선 속성에서 위치를 찾아야 합니다.

 

 

C드라이버 밑에 data폴더 안에 있습니다. 저 위치를 드래그하여 복사해 R로 와서 입력해 줍니다.

> score<-read.table("C:\data\score.txt", header=T)
Error: '\d' is an unrecognized escape in character string starting ""C:\d"
 
다음과 같이 read.table()안에 파일경로및 변수명.txt를 복사해오면 \가 역슬래쉬 형태로 나타나며, 저 경우에는 R에서 반드시 에러가 나게됩니다.
R에서 파일 경로를 지정할 때는 반드시 역슬래쉬를 /로 바꿔줘야 합니다. 
아니면, 역슬래쉬를 두번 써줘야 합니다.

> score<-read.table("C:\\data\\score.txt", header=T) > score<-read.table("C:/data/score.txt", header=T)

> score
  id gender math
1  1      M   97
2  2      F   78
3  3      M   66
4  4      F   90
5  5      M   74
6  6      F   85

 

다음과 같이 오류없이 잘 들어간 것을 살펴볼 수 있습니다.

 

header는 txt파일에서 맨윗줄의 변수명들을 들고오고 싶다면 T, 제외하고 싶다면 F를 지정하시면 됩니다.

 

데이터 구분이 공백이 아닌 , 로 되어있는 경우도 제법 많습니다. 그럴 땐 구분자를 지정해주는 sep=","를 써주면 파일을 잘 불러들일 수 있습니다.

> str(score)
'data.frame':	6 obs. of  3 variables:
 $ id    : int  1 2 3 4 5 6
 $ gender: Factor w/ 2 levels "F","M": 2 1 2 1 2 1
 $ math  : int  97 78 66 90 74 85

구조를 살펴보면, id, math는 numeric, gender는 factor임을 알 수 있습니다.

 

가끔, 이 변수타입들을 데이터를 불러올 때부터 바꿔서 가져와야 할 경우가 있습니다.

 

예를들어 우편번호의 앞 3자리만 이용하는 코드를 짜고 싶은데, 00533, 01232와 같은 데이터값들은 R에서 numeric타입으로 읽어 533, 1232로 가져와 버립니다.

 

이 경우엔 숫자형이 아닌 문자형변수로 들고와 줘야 합니다. 우편번호의 예와 같이 특정한 경우가 아니라면, 불러들인 다음 as.을 이용해서 바꿔주시면 됩니다.

 

하지만 R에서 이미 533으로 읽어 버렸다면 as.charactor()을 사용해도 "533"으로 변환되지 "00533"으로 바뀌지 않습니다.

 

이럴 때 사용할 수 있는 것이 read.table()의 옵션 중 colClasses라는 것입니다.

 

만약 저희가 id를 int가 아닌 factor타입으로 읽고 싶다면

 

> score<-read.table("C:/data/score.txt", header=T, colClasses = c("factor", "factor", "integer"))
> str(score)
'data.frame':	6 obs. of  3 variables:
 $ id    : Factor w/ 6 levels "1","2","3","4",..: 1 2 3 4 5 6
 $ gender: Factor w/ 2 levels "F","M": 2 1 2 1 2 1
 $ math  : int  97 78 66 90 74 85

다음과 같이 지정해 주시면 factor로 바꿔 들어간 것을 살펴볼 수 있습니다. 옵션들을 잘 사용하면 데이터를 불러올 때 난감한 상황에서 잘 해결할 수 있습니다.

 

 

 

다음번에는 csv파일과 xlsx파일을 불러오는 법에 대해 다뤄보도록 하겠습니다.

 

 

 

 

 

 

 

 

 

+ Recent posts