티스토리 뷰

반응형

<요약>

파일 입력

 read.csv() : 외부 csv 파일을 불러오고, 데이터 프레임 형식으로 저장 

 read.table() : 텍스트 파일을 불러오고, 데이터 프레임 형식으로 저장 

 scan() : 외부 텍스트 파일을 불러오고, 벡터 형식으로 저장

 readline() : 사용자 입력 데이터 저장(사용자에게 메시지 전달 가능)

 readLine() : 텍스트 파일을 한 줄씩 읽어 문자열 벡터로 저장


파일 출력

 write.csv() : 데이터 프레임을 외부 csv 파일로 저장


객체 파일 입출력

 save() : 메모리에 있는 객체를 파일에 저장 

 load() : 외부 파일로 객체를 메모리로 읽기




파일 입력

 

read.csv() : 외부 csv 파일을 불러오고, 데이터 프레임 형식으로 저장 


read.csv(file, stringsAsFactors = FALSE)


csv 파일이란 텍스트 파일을 ,(콤마)로 구분한 파일을 의미합니다.

read.csv 함수는 header = TRUE,  stringsAsFactors = TRUE 가 default로 설정되어있습니다.

read.csv라고 꼭 csv 파일만 불러올 수 있는게 아니고, sep 옵션을 주면 다른 파일도 불러올 수 있습니다.


# 권장 사용법

x <- read.csv("read.csv", stringsAsFactors = FALSE)



> x <- read.csv("read.csv")

> x

  id    name price

1  1 iPhoneX   100

2  2    iPad    80

3  3 Airpods    20

4  4   Watch     -

> str(x)  stringsAsFactors 옵션 생략 시, 문자열이 Factor로 저장됩니다.

'data.frame': 4 obs. of  3 variables:

 $ id   : int  1 2 3 4

 $ name : Factor w/ 4 levels "Airpods","iPad",..: 3 2 1 4

 $ price: Factor w/ 4 levels "-","100","20",..: 2 4 3 1


# stringsAsFactors  : 문자열 컬럼을 팩터화 할 것인지 여부 

# na.strings = "-" : 특정 문자를 NA 형식으로 저장. (중요!!!)

> x <- read.csv("read.csv", stringsAsFactors = FALSE, na.strings = "-")

> str(x)

'data.frame': 4 obs. of  3 variables:

 $ id   : int  1 2 3 4

 $ name : chr  "iPhoneX" "iPad" "Airpods" "Watch"

 $ price: int  100 80 20 NA


# nrows 옵션 : 일부 데이터 로딩(대량의 데이터 로딩 시 일부의 데이터를 미리 로딩하여 형식 확인 가능)

> read.csv("emp.csv", nrows = 3)

  EMPNO ENAME      JOB  MGR        HIREDATE  SAL COMM DEPTNO

1  7369 SMITH    CLERK 7902 1980-12-17 0:00  800   NA     20

2  7499 ALLEN SALESMAN 7698 1981-02-20 0:00 1600  300     30

3  7521  WARD SALESMAN 7698 1982-02-22 0:00 1250  500     30


# skip = 0 : 일부 데이터 로딩 제외(첫번째 행이 설명인 경우)

read.csv("file2.txt", skip = 1)   # 첫번째 행 제외 


# encoding : 파일 인코딩 옵션(한글일 경우 cp949, R은 기본으로 cp949 적용)

read.csv("student.csv", stringsAsFactors = F, encoding = 'cp949')



# 참고

#1. stringsAsFactors = TRUE 로 파일을 불러들였을 경우, 펙터 변수를 문자열 변수로 변환하는 방법

     x$name <- as.character(x$name)  

#2. 불러온 파일의 헤더를 지정하는 방법(컬럼은 숫자가 올 수 없으므로 숫자 컬름은 앞에 X라는 접두어가 붙게 됩니다.)

    names(x) <- c("id", "name", "price")

#3. names() 혹은 colnames() 로 컬럼 이름 추가, 변경 가능

> names(emp)

[1] "EMPNO"    "ENAME"    "JOB"      "MGR"      "HIREDATE" "SAL"      "COMM"     "DEPTNO"  

> colnames(emp)

[1] "EMPNO"    "ENAME"    "JOB"      "MGR"      "HIREDATE" "SAL"      "COMM"     "DEPTNO" 




read.table() : 텍스트 파일을 불러오고, 데이터 프레임 형식으로 저장 


read.table(file, 

           header = FALSE,   # 첫 번째 행을 헤더로 사용할 것인지 여부 

           sep = ""              # read.csv 는 자동으로 ,(콤마)로 구분 

           row.names, col.names,  # 행, 열 이름 설정. 데이터를 불러온 후 지정하는게 좋음 

           na.strings = "NA",     # NA 처리를 하고자 하는 문자열 지정 

           nrows = -1,      # 일부 데이터 로딩  

           skip = 0,          # 일부 데이터 로딩 제외 

           stringsAsFactors = default.stringsAsFactors(), # 문자열 컬럼을 팩터화 할 것인지 여부 

           fileEncoding = "", encoding = "unknown")  # 파일 인코딩 


read.csv()함수와 다르게 header = F 가 default 로 설정되어있습니다.

     

# 권장 사용법

read.table("read.txt", sep = ",", header = T, stringsAsFactors = FALSE # sep, header 옵션을 추가해야 read.csv와 같은 결과 



# read.table()함수는 sep 옵션을 지정해주지 않으면 각 행을 하나의 값으로 읽습니다.

> read.table("file1.txt")  

       V1

1 A,B,C,D

2 1,2,3,4

3 5,6,7,8

4 4,2,8,-

5 3,?,6,2

> read.table("file1.txt", sep = ",") 

  V1 V2 V3 V4

1  A  B  C  D

2  1  2  3  4

3  5  6  7  8

4  4  2  8  -

5  3  ?  6  2


# header 옵션: 첫 번째 행 컬럼화 여부 

> read.table("file1.txt", sep = ",", header = TRUE)

  A B C D

1 1 2 3 4

2 5 6 7 8

3 4 2 8 -

4 3 ? 6 2


# skip = n 옵션 사용 시 텍스트의 앞 n 줄을 건너 뛸 수 있습니다. 

> read.table("file1.txt", header = T, skip = 2)


# nrows = n 옵션 사용 시, n 줄 만큼의 행만 읽을 수 있습니다. 

> read.table("file1.txt", header = T, nrows = 2)


# na.strings = "" : NA 처리를 하고자 하는 문자열 지정 

> t2 <- read.table("file1.txt", sep = ",", header = TRUE)

> t2

  A B C D

..

3 4 2 8 -

4 3 ? 6 2

> t2 <- read.table("file1.txt", sep = ",", header = TRUE, na.strings = c("-","?"))

> t2

  A  B C  D

..

3 4  2 8 NA

4 3 NA 6  2


# 참고

> disease <- read.csv('disease.txt', stringsAsFactors = F, sep = '', encoding = 'utf-8')

> disease <- read.table('disease.txt', stringsAsFactors = F, header = T)

> disease

   월별 콜레라 장티푸스 이질 대장균 A형간염

1   1월      6      175  550      7     351

2   2월      5      165  253      9     535

3   3월      1      200   NA     13    1003

...




scan() : 외부 텍스트 파일을 불러오고, 벡터 형식으로 저장 


> v1 <- scan("test.txt")  

Read 6 items

> v1

[1] 111 222 333 444 555 666


> v2 <- scan()  # 사용자가 입력한 숫자 값을 벡터로 저장

1: 11

2: 12

3: 13

4:          # Enter 를 누르면 종료

Read 3 items

> v2

[1] 11 12 13


> v3 <- scan(what="")   # 사용자가 입력한 문자 값을 벡터로 저장(문자 입력 시 what 옵션 필요)

1: Im

2: hungry

3:         # Enter 를 누르면 종료

Read 2 items

> v3

[1] "Im"     "hungry"




readline() : 사용자 입력 데이터 저장(사용자에게 메시지 전달 가능)


> answer <- readline("값을 입력하세요(Y or N)")

값을 입력하세요(Y or N) N

> answer

[1] "N"

> if( tolower(answer) == "y"){    # if문에 유용하게 사용 가능

+   print("I want !")

+ } else {

+   print("I don't want !")

+ }

[1] "I don't want !"




readLine() : 텍스트 파일을 한 줄씩 읽어 문자열 벡터로 저장


> readLines("test.txt")  #  한 라인을 하나의 쉘로 처리
[1] "111 222" "333 444" "555 666"
> scan("test.txt")          # 라인 상관 없이 공백으로 구분되어, 단어가 각 쉘로 처리
Read 6 items
[1] 111 222 333 444 555 666






파일 출력


 write.csv() : 데이터 프레임을 외부 csv 파일로 저장


R에서 작업한 데이터를 외부로 저장할 수 있습니다.


write.csv(데이터, file="파일명", row.names=행 포함 여부(default TRUE))


> write.csv(professor, file="test.csv")






객체 파일 입출력


 작업 공간에서 사용했던 변수, 데이터들을 저장하고 불러올 때 사용됩니다. (어제와 동일한 환경에서 작업)

save() : 메모리에 있는 객체를 파일에 저장 


save(저장할 객체, file="파일명")   # 모든 객체를 저장하고 싶을 때, list=ls()


save(list=ls(), file="storage.RData")


load() : 외부 파일로 객체를 메모리로 읽기


load("파일명")


load("storage.RData")

ls()






참고: KIC 캠퍼스 머신러닝기반의 빅데이터분석 양성과정



반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday