R에서 엑셀(xls,xlsx)파일 불러오는 방법, read_excel()
엑셀파일(xls, xlsx)을 R에서 불러오려면 readxl 패키지를 설치해야합니다. 먼저 패키지를 설치합시다.
> install.packages("readxl")
엑셀파일을 하나 만들어봅시다.
저장한 엑셀파일의 경로는 아래와 같습니다.
"C:/Users/Public"
먼저 working directory를 위 경로로 바꿔야합니다. 아래와 같은 코드를 실행합니다.
> setwd("C:/Users/Public")
먼저 패키지를 불러옵니다.
> library(readxl)
이제 엑셀파일을 불러옵시다. read.table함수를 사용합니다. 다양한 옵션이 있지만 일단은 옵션 지정 없이 불러오겠습니다.
> mydata=read_excel("myex.xlsx")
아래와 같이 잘 불러와졌습니다. 자료구조는 tibble입니다.
> mydata
# A tibble: 4 x 2
`1` `10`
<dbl> <dbl>
1 2 20
2 3 30
3 4 40
4 5 50
저는 dataframe으로 바꿔서 사용합니다. as.data.frame 함수를 사용합니다.
> mydata=as.data.frame(read_excel("myex.xlsx"))
> mydata
1 10
1 2 20
2 3 30
3 4 40
4 5 50
문제는 첫줄이 자동으로 header로 들어갑니다. 이때는 col_names 옵션을 설정하여 해결해줍니다. 열의 이름을 지정해주면 첫줄이 header로 들어가지 않습니다.
> mydata=as.data.frame(read_excel("myex.xlsx",col_names=c("c1","c2")))
> mydata
c1 c2
1 1 10
2 2 20
3 3 30
4 4 40
5 5 50
이제 read_excel 함수의 옵션을 살펴봅시다. 확장자가 특정된 read_xls와 read_xlsx함수도 있지만 더 일반적인 read_excel함수를 설명하겠습니다.
read_excel(
path,
sheet = NULL,
range = NULL,
col_names = TRUE,
col_types = NULL,
na = "",
trim_ws = TRUE,
skip = 0,
n_max = Inf,
guess_max = min(1000, n_max),
progress = readxl_progress(),
.name_repair = "unique"
)
path옵션은 불러올 엑셀파일의 경로를 입력합니다.
sheet옵션은 특정 sheet를 불러올 때 사용합니다. 아래와 같이 sheet를 하나 추가하였다고 합시다.
아래와 같이 sheet의 순서를 입력해도 되고, sheet 이름을 입력해도 됩니다.
> mydata=as.data.frame(read_excel("myex.xlsx",col_names=c("c1","c2"),sheet=2))
> mydata
c1 c2
1 a e
2 b f
3 c g
4 d h
sheet 이름을 입력해보겠습니다.
> mydata=as.data.frame(read_excel("myex.xlsx",col_names=c("c1","c2"),sheet="Sheet2"))
> mydata
c1 c2
1 a e
2 b f
3 c g
4 d h
range옵션은 불러올 셀의 영역을 선택해줍니다. 아래 그림을 봅시다.
이 영역만 불러와봅시다.
> mydata=as.data.frame(read_excel("myex.xlsx",col_names=c("c1","c2"),sheet="Sheet2",range="A1:B2"))
> mydata
c1 c2
1 a e
2 b f
col_names옵션은 열의 이름을 지정합니다.
col_types옵션은 열의 자료형을 지정합니다. 열의 수 만큼 입력해야하고, 그렇지 않은 경우는 입력한 값이 반복되어 자동입력됩니다. 자료형의 종류는 다음과 같습니다. "skip", "guess", "logical", "numeric", "date", "text" or "list".
위 그림의 sheet1을 불러옵시다.
> mydata=as.data.frame(read_excel("myex.xlsx",col_names=c("c1","c2"),sheet="Sheet1",col_types=c("text","numeric")))
> str(mydata)
'data.frame': 5 obs. of 2 variables:
$ c1: chr "1" "2" "3" "4" ...
$ c2: num 10 20 30 40 50
skip타입은 어떤역할을 할까요? 해당 열을 불러오지 않습니다.
> mydata=as.data.frame(read_excel("myex.xlsx",col_names=c("c1","c2"),sheet="Sheet1",col_types=c("text","skip")))
> mydata
c1
1 1
2 2
3 3
4 4
5 5
na옵션은 무엇을 NA로 인식할지 결정합니다. 디폴트는 "" 인데 빈 셀을 NA로 인식한다는 의미입니다. 아래와 같이
NA가 포함된 엑셀을 만들어봅시다.
불러옵시다.
> mydata=as.data.frame(read_excel("myex.xlsx",col_names=c("c1","c2"),sheet="Sheet1"))
> mydata
c1 c2
1 1 10
2 NA 20
3 3 NA
4 4 40
5 5 50
na의 디폴트는 NA라고 입력했는데도 NA로 인식했네요? 어떻게된걸까요. str 함수를 사용하면 NA로 인식한게 아니라 문자형으로 인식한 것임을 알 수 있습니다.
> str(mydata)
'data.frame': 5 obs. of 2 variables:
$ c1: chr "1" "NA" "3" "4" ...
$ c2: chr "10" "20" "NA" "40" ...
NA를 인식하게 하려면 아래와 같이 옵션을 설정해야 합니다.
> mydata=as.data.frame(read_excel("myex.xlsx",col_names=c("c1","c2"),sheet="Sheet1",na="NA"))
> str(mydata)
'data.frame': 5 obs. of 2 variables:
$ c1: num 1 NA 3 4 5
$ c2: num 10 20 NA 40 50
trim.ws 옵션은 문자 앞에 띄어쓰기와 같은 whitespace가 있는 경우 이를 trim(잘라내기)할지 여부를 결정합니다.
아래 그림을 봅시다.
b 앞에 띄어쓰기가 되어있습니다. 불러와봅시다.
> mydata=as.data.frame(read_excel("myex.xlsx",col_names=c("c1","c2"),sheet="Sheet2"))
> str(mydata)
'data.frame': 4 obs. of 2 variables:
$ c1: chr "a" "b" "c" "d"
$ c2: chr "e" "f" "g" "h"
띄어쓰기가 사라져있습니다. trim.ws가 TRUE인게 디폴트라서 그렇습니다. FALSE로 바꿔봅시다.
> mydata=as.data.frame(read_excel("myex.xlsx",col_names=c("c1","c2"),sheet="Sheet2",trim_ws=FALSE))
> str(mydata)
'data.frame': 4 obs. of 2 variables:
$ c1: chr "a" " b" "c" "d"
$ c2: chr "e" "f" "g" "h"
띄어쓰기가 그대로 있습니다.
skip옵션은 처음 몇번째 줄까지 건너뛸지를 결정합니다. 아래와 같은 메모장이 있다고 합시다.
두번째줄까지 건너띄고, 세번째 줄부터 가져와봅시다.
> mydata=as.data.frame(read_excel("myex.xlsx",col_names=c("c1","c2"),sheet="Sheet1",skip=2))
> mydata
c1 c2
1 3 30
2 4 40
3 5 50
n_max옵션은 최대 몇번째 줄까지 가져올지 결정합니다.
guess_max옵션는 열의 타입을 guess하는데 몇번째 줄까지 반영할지를 결정합니다.
.name_repair옵션은 입력된 열이름이 형식에 맞지 않을 경우 자동으로 수정해주는 옵션입니다.
> mydata=as.data.frame(read_excel("myex.xlsx",col_names=c("1","c2"),sheet="Sheet1",.name_repair="universal"))
New names:
* `1` -> ...1
> mydata
...1 c2
1 1 10
2 2 20
3 3 30
4 4 40
5 5 50
'2. 데이터 > 1) 데이터 불러오기' 카테고리의 다른 글
[R] 특정 패키지가 제공하는 데이터를 불러오는 방법 (0) | 2020.11.30 |
---|---|
[R] 작업 디렉토리 확인 및 변경 (0) | 2020.11.30 |
R에서 csv(콤마 구분 데이터)파일 불러오는 방법, read.csv() (0) | 2020.01.21 |
R에서 데이터(txt) 불러오는 방법, read.table() 옵션의 자세한 설명 (0) | 2020.01.20 |
R에서 데이터 불러올 때, 파일을 직접 선택하는 창을 띄우는 방법 (0) | 2020.01.04 |
댓글