59doit
[ R ] 데이터 입출력 본문
데이터 불러오기
(1) 키보드 입력
- scan()함수, edit()함수
ex ) 숫자 입력
num <- scan() num sum(num) |
ex ) 문자 입력
name <- scan(what = character()) name |
- scan() 함수를 실행하면 console창에 입력 데이터의 순서를 나타내는 프롬프트가 표시 입력된 데이터는 입력된 순서대로 벡터변수에 저장됨
ex ) 편집기를 이용한 data.frame 만들기
df = data.frame() df = edit(df) df |
- edit()함수는 표 형식의 데이터편집기를 제공
(2) 로컬 파일 가져오기
- 함수를 이용하여 파일의 데이터를 가져오기
read.table()함수 이용
- 테이블 형태로 작성
- 컬럼이 공백, 탭, 콜론(:), 세미콜론(;), 콤마(,) 등의 구분자가 포함한된 자료 파일을 불러올 수 있는 함수
- 구분자가 공백 또는 tab이면 sep속성 생략가능
- 컬럼명이 있는 경우 header속성을 ‘header=TRUE’로 지정
- read.table(file = “경로명/파일명”, sep=”구분자”, header = “T or F”)
ex ) 컬럼명이 없는 파일 불러오기
getwd() setwd("C:/Rwork") student <- read.table(file = "student.txt") student # V1 V2 V3 V4 # 1 101 hong 175 65 # 2 201 lee 185 85 # 3 301 kim 173 60 # 4 401 park 180 70 names(student) <- c("번호", "이름", "키", "몸무게") student # 번호 이름 키 몸무게 # 1 101 hong 175 65 # 2 201 lee 185 85 # 3 301 kim 173 60 # 4 401 park 180 70 |
- 컬럼명이 없는 경우 v1, v2, … 형태로 기본 컬럼명이 지정됨
- names()함수를 사용하면 사용자가 원하는 컬럼명을 지정 가능
ex ) 컬럼명이 있는 파일 불러오기
student <- read.table(file = "student.txt", header=T) student # X101 hong X175 X65 # 1 201 lee 185 85 # 2 301 kim 173 60 # 3 401 park 180 70 |
- 컬럼명이 있는 파일을 불러오기 위해서 ‘header=TRUE’ 또는 ‘header=T’ 속성 이용
ex ) 탐색기를 이용한 파일 선택
student1 <- read.table(file.choose(), header = TRUE) |
- file.choose() 함수 이용 시 파일선택 대화상자에서 파일 선택 가능
ex ) 구분자가 있는 경우
student2 <- read.table(file = "student2.txt", sep = ";", header = TRUE) student2 <- read.table(file = "student2.txt", sep = "\t", header = TRUE) student2 # 번호 이름 키 몸무게 # 1 101 hong 175 65 # 2 201 lee 185 85 # 3 301 kim 173 60 # 4 401 park 180 70 |
- 구분자가 있는 경우 sep=”구분자” 형식
- 구분자가 tabl인 경우 sep=”\t” 형식으로 sep속성 값을 지정하여 파일을 불러온다
ex ) 결측치를 처리하여 파일 불러오기
student3 <- read.table(file = "student3.txt", header = TRUE, na.strings = "-") student3 # 번호 이름 키 몸무게 # 1 101 hong 175 65 # 2 201 lee 185 85 # 3 301 kim 173 NA # 4 401 park NA 70 |
- 특정 문자열을 NA로 처리하여 파일을 불러올 수 있다.
- ‘-‘문자를 처리하기 위해서 na.string=”-“속성을 사용하면 ‘-‘문자를 NA로
변경하여 파일의 데이터를 불러온다
read.csv()함수 이용
- CSV(Comma Separated Value)파일 형식은 콤마(,)를 기준으로 각 컬럼을 구분하여 저장한 데이터 형
- read.csv(file=”경로명/파일명” [, sep=”,”] [, header=TRUE])
ex ) CSV 파일 형식 불러오기
student4 <- read.csv(file = "student4.txt", sep = ",", na.strings = "-") student4 # 번호 이름 키 몸무게 # 1 101 hong 175 65 # 2 201 lee 185 85 # 3 301 kim 173 NA # 4 401 park NA 70 |
- CSV는 콤마(,)가 구분자이기 때문에 sep속성은 생략 가능
(3) 인터넷에서 파일 가져오기
사이트에서 csv파일 형식의 데이터를 R 스크립트로 가져오기
ex 단계1) 인터넷에서 파일을 가져와 시각화
titanic <- read.csv( "https://vincentarelbundock.github.io/Rdatasets/csv/COUNT/titanic.csv" ) titanic head(titanic) # X class age sex survived # 1 1 1st class adults man yes # 2 2 1st class adults man yes # 3 3 1st class adults man yes # 4 4 1st class adults man yes # 5 5 1st class adults man yes # 6 6 1st class adults man yes dim(titanic) # [1] 1316 5 str(titanic) # 'data.frame': 1316 obs. of 5 variables: # $ X : int 1 2 3 4 5 6 7 8 9 10 ... # $ class : chr "1st class" "1st class" "1st class" "1st class" ... # $ age : chr "adults" "adults" "adults" "adults" ... # $ sex : chr "man" "man" "man" "man" ... # $ survived: chr "yes" "yes" "yes" "yes" ... |
- CSV는 콤마(,)가 구분자이기 때문에 sep속성은 생략 가능
ex 단계2) 자료의 차원 정보와 자료구조 보기 및 범주의 빈도수 확인
table(titanic$age) # adults child # 1207 109 table(titanic$sex) # man women # 869 447 table(titanic$survived) # no yes # 817 499 |
- CSV는 콤마(,)가 구분자이기 때문에 sep속성은 생략 가능
ex 단계3) 데이터프레임에서 문자형 컬럼
head(titanic) # X class age sex survived # 1 1 1st class adults man yes # 2 2 1st class adults man yes # 3 3 1st class adults man yes # 4 4 1st class adults man yes # 5 5 1st class adults man yes # 6 6 1st class adults man yes tail(titanic) # X class age sex survived # 1311 1311 3rd class child women no # 1312 1312 3rd class child women no # 1313 1313 3rd class child women no # 1314 1314 3rd class child women no # 1315 1315 3rd class child women no # 1316 1316 3rd class child women no |
- head()함수: 관측치의 앞부분 6개 보여줌
- tail()함수: 관측치의 뒷부분 6개 보여줌
cf) R 3.x버전에서 데이터프레임의 칼럼으로 사용되는 자료형이 문자형(chr)인 경우 요인형(Factor)으로 자동 변환됨.
R 4.0버전에서는 문자형을 그대로 유지
ex 단계4 ) 교차분할표 작성
tab <- table(titanic$survived, titanic$sex) tab # man women # no 694 123 # yes 175 324 |
- table()함수에서 첫번째 인수는 교차분할표에서 행으로 나타나고, 두번 째 인수는 열로 나타난다.
ex 단계5 ) 범주의 시각화 – 막대 차트 그리기
barplot(tab, col = rainbow(2), main = "성별에 따른 생존 여부") |
- barplot()함수: 막대그래프 그리기
데이터 저장하기
콘솔에 출력하거나 처리가 완료된 결과물을 특정 파일에 저장하는 방법
(1) 화면(console) 출력
- 처리결과가 저장된 변수를 화면(console)에 출력하는 R 함수
- cat()함수, print()함수
ex ) cat()함수 이용 변수 출력
x <- 10 y <- 20 z <- x * y cat("x * y의 결과는 ", z, "입니다.\n") # x * y의 결과는 200 입니다. cat("x * y = ", z) # x * y = 200 |
- cat()함수는 출력할 문자열과 변수를 함께 결합하여 콘솔에 출력해 준다.
ex ) print()함수 이용 변수 출력
print(z) # [1] 200 |
- print()함수는 문자열을 함께 사용할 수 없다. 변수의 값 또는 수식의 결과만을 출력할 수 있다.
(2) 파일 저장
결과를 특정 파일에 저장하는 방법
ex ) sink()함수를 이용한 파일 저장
setwd("C:/Rwork2") library(RSADBE) data("Severity_Counts") sink("severity.txt") severity <- Severity_Counts severity sink() |
- sink()함수를 실행하면 이후에 작업한 모든 내용이 지정된 파일에 저장된다.
- sink()함수의 기능 종료를 위해서 인수없이 sink()함수를 한 번 더 실행
ex ) write.table()함수를 이용한 파일 저장
# titanic 자료 확인 titanic # 파일 저장 위치 지정 setwd("C:/Rwork2") # titanic.txt 파일에 저장 write.table(titanic, "titanic.txt", row.names = FALSE) |
- 처리된 결과(변수)를 테이블 형식으로 파일에 저장하는 함수
- ‘row.names’ 속성: 행 번호 제거
- ‘quote’ 속성: 따옴표를 제거
- ‘row.names = F’는 행의 이름을 제거
ex ) Write.table()함수로 저장한 파일 불러오기
titanic_df <- read.table(file = "titanic.txt", sep = "", header = T) titanic_df |
- write.table()함수로 저장된 데이터는 read.table()함수를 이용하여 텍스트 파일을 데이터프레임 형식으로 불러올 수 있다.
ex ) write.csv()함수를 이용한 파일 저장
setwd("C:/Rwork") st.df <- studentx write.csv(st.df, "stdf.csv", row.names = F, quote = F) |
- 데이터프레임 형식의 데이터를 CSV형식으로 파일에 저장
- write.csv()함수를 이용하여 CSV형식으로 파일에 저장
'Programming > R' 카테고리의 다른 글
[ R ] 연산자 & 조건문 & 반복문 (0) | 2022.11.17 |
---|---|
[ R ] 연습문제 (3) (0) | 2022.11.17 |
[ R ] 연습문제 (2) (0) | 2022.11.16 |
[ R ] List 자료구조 & 문자열처리 (0) | 2022.11.16 |
[ R ] DataFrame 자료구조 (0) | 2022.11.15 |