Skip to main content

R 기초, 데이터 불러오고 내보내기

R에서 데이터를 불러오고 내보내는 방법을 알아보자. 데이터를 불러오는 명령어야 아무거나 가져다 쓰면 되지만 알고보면 여기에도 고려할 사항이 조금 있다. 데이터를 잘못 불러와서 나중에 고생하거나 혹은 에러가 났는데 고칠 방법을 모르게 되면 난처하다. 따라서 그저 아무거나 따라서 쓰기보다는 데이터 불러오기 과정에서 어떤 문제가 발생할 수 있는지, 어떤 방법으로 불러오는 것이 나은지 알아두면 좋다. Base 함수와 package readr을 이용한 데이터 불러오기와 내보내기를 알아보자.

(한줄요약: base 함수보다는 package readr의 read_csv(), write_csv()를 추천한다.)


잘못된 정보가 있으면 댓글로 알려주시면 감사하겠습니다.

의학 논문 작성을 위한 R 기초

2. R에서 데이터 불러오고 내보내기

2.1. csv파일로 저장하기 (.xls to .csv)

많은 경우에 자료를 엑셀 파일 형태로 가지고 있다. 이를 그대로 R에서 불러올 수도 있지만 (e.g., package readxl), 여러 sheet를 포함한 경우에 sheet를 지정해줘야 하기도 하고 가끔 데이터를 불러왔을 때 에러가 나거나 원본과 다르게 되엉킨 경우도 있어서 가급적 csv파일 형태로 변환한 뒤 불러오는 것을 권한다.

엑셀 파일은 단순히 '다른이름으로 저장하기'를 통해 .csv로 저장할 수 있으나 다음 몇 가지 사항에 주의해야 한다.
  1. 변수명이나 값에 한글이 들어가 있으면 문제가 생길 수 있다.
  2. 변수명(첫 행)에는 띄어쓰기를 사용하지 말고 알파벳, 숫자, -, _를 혼용해서 사용하자.
  3. csv로 저장하게 되면 multi-sheet중에 하나만 저장되게 되므로 주의하자.
꼭 한글이 필요하다면, 엑셀에서 다른 이름으로 저장 -> 파일이름 설정하는 팝업에서 '도구' -> 웹 옵션 -> 인코딩 -> UTF-8로 설정한 뒤 저장한다.

그래도 해결이 안 되는 경우가 있는데, 그런 경우는 .csv 파일을 .txt로 바꾼 뒤 메모장에서 열어서 다른 이름으로 저장 -> 인코딩 -> UTF-8로 다시 저장한 뒤 파일명을 .csv로 바꿔준다.

2.2. 데이터 불러오기: read.csv

R에서 csv파일을 불러오는 기본 명령어(base 함수)는 read.csv()이다. 다음과 같이 파일 경로와 함께 사용한다. 파일 위치 폴더구분에 윈도에서 사용하는 '\' 기호를 쓸 경우는 두개씩 써줘야 하고, 그렇게 하지 않으려면 /을 쓰면 된다.
example <- read.csv("c:/R/R_document/iris.csv")
example <- read.csv("c:\\R\\R_document\\iris.csv")
head(example, 3)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
#example <- read.csv("c:\R\R_document\iris.csv") 이렇게 쓰면 안 된다.

read.csv() 내부에 arguments 설정을 통해 옵션을 변화시킬 수 있다.
example <- read.csv("c:/R/R_document/iris.csv", header = FALSE)
#원본 파일의 첫 행을 변수명으로 처리하지 않는다.
#원본 파일의 첫 행에 변수명이 존재하지 않고, 불러들인 다음 따로 변수명을 설정해줄 것이라면 이 옵션을 써야 한다.

head(example, 3)
##             V1          V2           V3          V4      V5
## 1 Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 2          5.1         3.5          1.4         0.2  setosa
## 3          4.9           3          1.4         0.2  setosa

기본 옵션으로 불러들인 경우 데이터 값에는 문제가 없지만 이따금 문자열(character)로 된 값들이 factor라는 형식으로 저장이 되는 경우가 있다. 추후 데이터 가공을 할 때에 문제가 생길 소지가 있으므로 문자열은 문자열 그대로 불러들이는 것이 좋다. 다음 옵션을 사용한다.
example <- read.csv("c:/R/R_document/iris.csv", stringsAsFactors = FALSE)

하지만 read.csv보다는 package readr의 read_csv를 사용할 것을 추천한다. 이유는 아래에 설명하였다.

2.3. 데이터 불러오기: read_csv (package readr)

Package readr의 함수들(e.g., read_csv)에 대해 다음과 같은 사실이 알려져있다. (출처: R for Data Science, Hadley Wickham & Garrett Grolemund)
  1. 일반적으로 베이스 함수보다 훨씬 더(~10배) 빠르다.
  2. 결과값을 data frame이 아닌 tibble*로 저장하며 character vector를 factor형으로 변환하지도, 불필요하게 행 이름을 사용하거나 열 이름을 변경하지도 않는다. 베이스 R 함수는 변환, 변경하기 때문에 불편하다.
  3. 좀 더 재현 가능하다. 베이스 R 함수는 운영체제 및 환경 변수의 일부 동작을 상속하므로 자신의 컴퓨터에서 작동하는 불러오기 코드가 다른 사람의 컴퓨터에서 작동하지 않을 수 있다.
*tibble은 data frame과 비슷하지만 좀 더 발전된 형태인 것으로 알아두면 된다. 대용량의 데이터를 다룰 때 좀 더 편리한 것으로 알고 있다.

read_csv를 사용하기 위해 package readr을 설치한다.
install.packages("readr")

read_csv()의 사용법은 다음과 같다.
library(readr) #먼저 package readr을 불러와야 한다.
example <- read_csv("c:/R/R_document/iris.csv")

알아둘 만한 추가 arguments는 다음과 같다.
example <- read_csv("c:/R/R_document/iris.csv", col_names = FALSE)
#read.csv의 header = FALSE와 대응
head(example, 3)
## # A tibble: 3 x 5
##   X1           X2          X3           X4          X5     
##   <chr>        <chr>       <chr>        <chr>       <chr>  
## 1 Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 2 5.1          3.5         1.4          0.2         setosa 
## 3 4.9          3           1.4          0.2         setosa

example <- read_csv("c:/R/R_document/iris.csv", skip = 1)
#원본 데이터에서 1행을 빼고 불러들인다. 2행이 column name으로 불러들여짐.
head(example, 3)
## # A tibble: 3 x 5
##   `5.1` `3.5` `1.4` `0.2` setosa
##   <dbl> <dbl> <dbl> <dbl> <chr> 
## 1   4.9   3     1.4   0.2 setosa
## 2   4.7   3.2   1.3   0.2 setosa
## 3   4.6   3.1   1.5   0.2 setosa

example <- read_csv("c:/R/R_document/iris.csv", skip = 1, col_names = FALSE)
#원본 데이터에서 1행을 불러들이지만 2행을 column name으로 불러들이지는 않음.
head(example, 3)
## # A tibble: 3 x 5
##      X1    X2    X3    X4 X5    
##   <dbl> <dbl> <dbl> <dbl> <chr> 
## 1   5.1   3.5   1.4   0.2 setosa
## 2   4.9   3     1.4   0.2 setosa
## 3   4.7   3.2   1.3   0.2 setosa

2.4. 데이터 내보내기: write.csv

사실 앞서 이용한 iris.csv는 R 내부 데이터셋인 iris를 csv로 저장해둔 것이다. write.csv의 사용법은 다음과 같다.
data(iris) #내장 데이터인 iris를 가져온다. iris라는 data frame으로 import된다.
write.csv(iris, "c:/R/R_document/iris_test.csv")
#write.csv(저장할 data frame 이름, "경로와 파일명")

iris_test <- read.csv("c:/R/R_document/iris_test.csv", stringsAsFactors = FALSE)
head(iris_test, 3)
##   X Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 1          5.1         3.5          1.4         0.2  setosa
## 2 2          4.9         3.0          1.4         0.2  setosa
## 3 3          4.7         3.2          1.3         0.2  setosa

불필요하게 iris 데이터의 행 번호가 별도의 column으로 저장되어있는 것을 알 수 있다. 따라서 다음과 같은 옵션을 넣어준다.
data(iris)
write.csv(iris, "c:/R/R_document/iris_test.csv", row.names = FALSE)
#행 이름(여기서는 번호)을 따로 저장하지 않는다.

#저장한 것을 다시 불러와 확인해보자.
iris_test <- read.csv("c:/R/R_document/iris_test.csv", stringsAsFactors = FALSE)
head(iris_test, 3)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa

2.5. 데이터 내보내기: write_csv (package readr)

write_csv는 앞서 별도의 옵션으로 걸어주었던 것이 default로 되어있어서 조금 더 간단하게 (그리고 빠르게) 사용 가능하다.
library(readr)
data(iris)
write_csv(iris, "c:/R/R_document/iris_test2.csv")

iris_test2 <- read_csv("c:/R/R_document/iris_test2.csv")
head(iris_test2, 3)
## # A tibble: 3 x 5
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##          <dbl>       <dbl>        <dbl>       <dbl> <chr>  
## 1          5.1         3.5          1.4         0.2 setosa 
## 2          4.9         3            1.4         0.2 setosa 
## 3          4.7         3.2          1.3         0.2 setosa

Comments

Popular posts from this blog

잘못 발음하기 쉬운 의학 용어 영어 단어 모음 (계속 업데이트)

의학 용어 영단어들은 대개 다 영어라서 한글로 바꾸기도 어렵고, 우리말로 바꿔놓은 텍스트를 읽노라면 원서를 읽는 것보다 머리가 더 지끈거릴 때도 있다. 하지만 원서는 그저 눈으로 읽을 뿐이다. 결국 발음은 제각각 다들 개성넘치게 하고 수업시간에도 웬만해서는 제대로 된 발음을 배울 수가 없다. 그렇게 의대 본과 4년, 인턴과 레지던트 5년 합쳐 9년 동안 굳어진 잘못된 발음을 이후에도 계속 쓰는게 일반적이다. 이왕 하는 영어 공부 내 전공에도 접목시켜보자. 매번 마음속으로 갸우뚱하며 자신없이 발음했던 의학 용어들을 머릿속에 떠오르는 대로 검색해 목록을 만들었다. 앞으로 발음이 헷갈리는 다른 의학 용어가 생길 때마다 바로 사전을 찾아보든지 유튜브를 찾아보고 정리해놓을 예정이다. 작심삼일이 되지 않기를 바랄 뿐이다. (마지막 업데이트 2020. 5. 27.) 단어 / Pronunciation symbols (Merriam-Webster dictionary) Anatomy-related pulmonary /  ˈpu̇l-mə-ˌner-ē / ㅓ와ㅜ의 중간느낌? 퍼ㅜㄹ머네리 *Cambridge [ˈpʊl.mə.ner.i], Oxford [|pʌlməneri], Collins  [pʌlməneri] mediastinum / mē-dē-ə-ˈstī-nəm / 메디아스티넘 아니고 미디어스타이넘 endocrine / ˈen-də-krən  , -ˌkrīn, -ˌkrēn / 엔도크라인 아니고 엔도크런, 엔도크린 aorta /  ā-ˈȯr-tə / 아올타 아니고 에이올더 atrium / ˈā-trē-əm / 아트리움 아니고 에이트리엄 myocardium / mī-ə-ˈkär-dē-əm / 마이오카ㄹ디엄 branchial / ˈbraŋ-kē-əl / 브랜키-얼 bronchial / ˈbräŋ-kē-əl / 브란키-얼 bronchiole / ˈbräŋ-kē-ˌōl / 브란키-오울 azygos / (ˌ)ā...

Drinking culture in Korea: Honsul (drinking alone) / 한국의 음주 문화: 혼술

Honsul (혼술, drinking alone) is a combination of two words, honja (혼자, alone) and sul-masigi (술 마시기, drinking). It has become a trendy and widely used word to describe how people have been drifting away from drinking with company since the 2010s. This trend is generally thought of as driven by the growing number of people in their 20s and 30s who are living alone. '혼술'은 '혼자'와 '술 마시기'의 합성어입니다. 이 단어는 사람들이 무리지어 음주를 하는 것을 기피하는 현상을 나타내는 단어로 2010년대 이후 유행하여 널리 쓰이게 되었습니다. 혼자 사는 20대, 30대 인구가 늘어나면서 이들이 이러한 문화를 주도하는 것으로 알려져 있습니다. Honsul at home (only two days ago) Honsul as a counter-reaction to hoe-sik 혼술, 회식 문화에 대한 반작용 Drinking alone never used to be common in Korea. Many people who were born in the 1960s and 70s are heavily group oriented. They highly value group activities and like to do everything "together." Members of their groups aren't allowed to say "no" to group activities. As they are now in key positions of companies, the...

잘못 알고 틀리게 발음하던 영어 단어 정리 (계속 업데이트)

나는 원어민처럼 부드럽게 굴러가는 발음은 바라지도 않는다. 그런데 가끔 눈으로 보고 읽는 영단어 조차도 발음하는 법을 모르거나, 자신있게 틀린 발음으로 말한뒤 뒤늦게 그것이 백번 양보해도 근본없는 엉터리 영어 발음이었다는걸 알게 되면 굉장히 부끄럽고 난감하다. 안다고 생각했던 단어조차 실제 발음이 내 생각과 전혀 달라서 깜짝 놀라기도 한다. 발음을 들어보지 않고 눈으로만 단어를 외우면 이렇게 된다. (아마 많은 한국인들이 나와 같은 실수를 매일 반복하고 있을 것이다.) 이제는 영단어를 찾아볼 때 발음을 꼭 들어보고 영어 발음 기호에도 관심을 기울이고 정리해두려고 한다. 이미 American English 발음에 익숙해져 있으므로 대중적인 Merriam-Webster 영영사전으로 찾아보기로 했다. 그런데Merriam-Webster에서는 내가 알던 발음 기호(IPA, International Phonetic Alphabet)가 아니라 다른 기호를 쓰고 있기에 우선 기호에 익숙해질 필요가 있어 보인다. ( Guide to Pronunciation  참조) 영영사전 속 오디오와 발음기호를 이용하여 공부해보고 그래도 애매한 것은 Youglish.com에서 실제 발음을 검색하며 공부하려고 한다. 아래 리스트는 내가 정리한 단어 목록인데 나 외에 여러 한국인들이 잘못 알고 발음을 틀리기 쉬운 단어들이 꽤 포함되어 있을 것이라 생각해서 공유해본다. (2020. 4. 21. 업데이트) 단어 / Pronunciation symbols (Merriam-Webster dictionary) 비교하며 볼 단어 cafe ( café ) / ka-ˈfā / 카페 아니고 캐페이 latte / ˈlä-(ˌ)tā / 라테이 frappe / fra-ˈpā / 프래페이 position / pə-ˈzi-shən / 포지션 아니고 퍼지션 solution / sə-ˈlü-shən / 솔루션 아니고 설루션 report / ri-ˈpȯrt...