12. File I/O
in Study on R Programming
Overview
R에서 파일 입출력을 하는 예시를 다루어 본다.
예제 파일 : fileio.zip
File I/O 실습
파일을 읽어 데이터를 저장하고, 저장된 데이터를 다시 파일로 추출하는 코드이다.
# jumsu.txt 파일 내용
# 강감찬 80 70 20
# 홍길동 60 50 70
# 김철수 90 40 90
# 김유신 40 50 70
# 이순신 50 80 90
# 텍스트 파일을 읽어 와서, 연산을 수행한 다음 csv 파일로 저장하기
jumsu <- read.table( file='jumsu.txt', sep=' ', header=FALSE )
# header option : 헤더 컬럼이 없는 경우 V숫자 형식으로 보여준다.
jumsu
# 컬럼 헤더 이름 변경하기
colnames(jumsu) <- c('이름', '국어', '영어', '수학')
jumsu
# 파생 컬럼 만들기
jumsu$총점 <- jumsu$국어 + jumsu$영어 + jumsu$수학
jumsu
# 평균 컬럼을 추가하세요.(소수점 2자리 형식으로)
jumsu$평균 <- round(jumsu$총점 / 3, 2)
jumsu
# ifelse 함수를 이용하여 합격 여부 컬럼을 추가하세요.(합격 기준 >= 평균 60)
jumsu$'합격 여부' <- ifelse(jumsu$평균 >= 60, '합격', '불합격')
jumsu
# 행 이름을 작성 : 파이썬의 색인과 같은 개념
# help(rownames)
rownames(jumsu) <- c('kang', 'hong', 'soo', 'shin', 'lee')
jumsu
# row.names=F 옵션 : 행이름은 표시 안하겠다
# quote=F : 모든 데이터는 따옴표는 넣지 않겠다.
# quote=T : 문자열형 데이터는 따옴표를 붙이겠다.
write.csv(jumsu, 'result1.csv', row.names = T, quote = T)
# 저장된 csv 파일
# "","이름","국어","영어","수학","총점","평균","합격 여부"
# "kang","강감찬",80,70,20,170,56.67,"불합격"
# "hong","홍길동",60,50,70,180,60,"합격"
# "soo","김철수",90,40,90,220,73.33,"합격"
# "shin","김유신",40,50,70,160,53.33,"불합격"
# "lee","이순신",50,80,90,220,73.33,"합격"
파일 입출력 추가 옵션
구분자로 데이터 구별하는 방법과 파일 선택 상자를 사용하는 예시
getwd()
# header는 기본 값이 FALSE이지만 습관적으로 적어 주도록 하자
# 파일에 header이 없는 경우
# 구분자가 공백이거나 tab 인 경우 sep 속성을 생략할 수 있다.
member01 <- read.table(file='member01.txt', header=FALSE)
member01
# getter
colnames(member01)
rownames(member01)
# setter
colnames(member01) <- c('번호', '이름', '키', '몸무게')
rownames(member01) <- c('hong', 'lee', 'kim', 'park')
member01
# 구분자 Tab으로 되어 있는 경우 sep 옵션을 이용하여 처리
member02 <- read.table(file='member02.txt', sep='\t', header=TRUE)
member02
# 파일 선택 대화 상자 사용하기
mydata <- read.table(file.choose(), header=TRUE)
mydata
# 세미콜론으로 구분자인 경우
member03 <- read.table(file='member03.txt', sep=';', header=TRUE)
member03
member04 <- read.table(file='member04.txt', sep='\t', header=TRUE)
member04
# - 문자는 NA로 표시해 주세요.
# NA : 결측치, 결측값
member04 <- read.table(file='member04.txt', sep='\t', header=TRUE, na.strings = '-')
member04