R 에서 한글 파일 쉽게 읽어오는 팁
운영체제 별로 다른 파일 인코딩으로 저장되는 문제로 인해, R 에서 한글이 인코딩 된 파일을 읽어올 때 문제가 자주 생깁니다. 아예 읽어오지 못하는 경우도 있고, 읽어와도 프린트 했을 때, 한글이 깨져 있는 경우가 많은데요. 특히 EUC-KR 로 인코딩 된 파일의 경우, data.table의 fread 나 readr의 read_csv 를 이용하기가 힘듭니다.
이런 상황에서 readAny 패키지의 read.any 함수를 이용하면 delimeter 로 구분된 text 파일이나, csv 파일 등을 쉽게 읽어올 수 있습니다 (또는 패키지 설치를 하지 않고 함수를 변수로 저장한 다음 사용하셔도 됩니다). 출처는 이곳입니다. readr 패키지의 guess_encoding 함수를 이용해 파일 인코딩을 알아낸 후, 이 정보를 이용해 read.table 로 읽어오는 방식입니다. 그리고 확장자에 맞게 delimter 를 지정하는 로직까지 있습니다.
library(devtools) install_github("plgrmr/readAny", force = TRUE) library(readAny) read.any("http://philogrammer.com/melon10_euc.csv", header = TRUE)
library(readr) read.any <- function(text, sep = "", ...) { encoding <- as.character(guess_encoding(text)[1,1]) setting <- as.character(tools::file_ext(text)) if(sep != "" | !(setting %in% c("csv", "txt")) ) setting <- "custom" separate <- list(csv = ",", txt = "\n", custom = sep) result <- read.table(text, sep = separate[[setting]], fileEncoding = encoding, ...) return(result) }
philogrammer 님의 방법에 추가적으로, 한 함수를 통해 엑셀 파일까지 읽어오기 위해 아래와 같이 변형해서 사용하였습니다.
read_any <- function(text, sep = "", ...) { encoding <- as.character(guess_encoding(text)[1,1]) setting <- as.character(tools::file_ext(text)) if(setting == 'xlsx'){ result <- read_excel(text) } else { if(sep != "" | !(setting %in% c("csv", "txt")) ) setting <- "custom" separate <- list(csv = ",", txt = "\n", custom = sep) result <- read.table(text, sep = separate[[setting]], fileEncoding = encoding, ...) } return(result) }
참고자료
'Tools > R' 카테고리의 다른 글
R - 난수 생성을 일별로 변경하기 (0) | 2022.06.21 |
---|---|
arulesViz 패키지 사용시 한글 안 나오는 문제 (0) | 2021.08.09 |
R - Windows 에서 devtools 로 R 패키지 설치 (0) | 2019.05.28 |
R 을 더욱 효율적으로 사용하는 방법 3가지 (3) | 2019.05.24 |
R 커뮤니티의 최신 유행을 Follow 하기 좋은 방법 (1) | 2019.05.24 |